DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

13章31

以下は、それぞれのコード行に対するより詳細なコメントアウトを含む説明です。

クラスAに関するコード:

import java.util.Collection; // Collectionインターフェースをインポートする。

public class A {
    // 'collection'は、どんな種類のCollection(リスト、セットなど)も
    // 保持できるプライベートなメンバ変数です。
    // 'private'アクセス修飾子により、この変数はクラスAの内部でのみアクセス可能です。
    private Collection collection;

    // 'set'メソッドはパブリックであり、外部からこのクラスの
    // 'collection'変数に値をセットするために使用されます。
    // 'Collection'型のパラメータを受け取り、このクラスの'collection'変数に代入します。
    public void set(Collection collection) {
        this.collection = collection; // 現在のインスタンスの'collection'に、引数で渡された'collection'を代入します。
    }
}
Enter fullscreen mode Exit fullscreen mode

クラスBに関するコード:

import java.util.Map; // Mapインターフェースをインポートする。

// クラスBはクラスAを継承しているため、Aのメソッドや変数にアクセスできます(継承のアクセスレベルに応じて)。
public class B extends A {

    // オーバーライドされた'set'メソッドは、Mapのインスタンスを受け取ります。
    // このメソッドは、Mapの値を'Collection'型として親クラスAの'set'メソッドに渡すために使われます。
    public void set(Map<String, String> map) {
        // クラスAの'set'メソッドを呼び出し、マップの値のコレクションを渡すためには
        // 'map.values()'を使用してマップのすべての値を取得し、それをCollectionとして親クラスの'set'メソッドに渡します。
        super.set(map.values()); // 'super'キーワードを使って親クラスのメソッドを呼び出します。
    }
}
Enter fullscreen mode Exit fullscreen mode

適切な行をクラスBのsetメソッドに挿入すると、選択肢A(set(map.values());)が正しいコードになります。これはクラスBがマップの値だけをコレクションとして親クラスAに渡したい場合に使用します。この動作は、クラスBのsetメソッドにより、Aクラスのcollectionプライベートメンバに対して間接的にマップの値をセットすることができるようになります。

設問の答えにはsuperはないが必要とのこと。

Top comments (0)