6

次のコードがあるとしましょう

public class SuperClass {
    protected int super_class_value;

    public SuperClass (int value) {
        this.super_class_value = value;
    }
}

public class Subclass extends SuperClass {
    protected int subclass_value;

    public SubClass(int super_class_value, int subclass_value) {
        super(super_class_value);
        this.subclass_value = subclass_value;
    }
}

ただし、今は SuperClass オブジェクトを SubClass コンストラクターに渡すことができるようにしたいと考えています。どうすればいいですか?

public SubClass(SuperClass super_class, int subclass_value) {
    //What do I do here?
    this.subclass_value = subclass_value;
}

基本的に、私はこのようなことをしたい...

public SubClass(SuperClass super_calss, int subclass_value) {
    super(super_class.super_class_value);
    this.subclass_value = subclass_value;
}

しかし、SuperClass がより複雑な場合、super() 呼び出しに各値を追加したくありません。代わりに、既に存在するオブジェクトを単純に渡し、それをスーパー クラスとして使用したいと考えています。

私はこれをしたい...

public SubClass(SuperClass super_class, int subclass_value) {
    super(super_class);
    this.subclass_value = subclass_value;
}

しかし、それが許可されているかどうかはわかりませんか?


SuperClass 定義にコンストラクターを追加すると、上記のことができるようです。しかし、それはどのように見えるでしょうか?

public class SuperClass {
    protected int super_class_value;

    public SuperClass (int value) {
        this.super_class_value = value;
    }

    public SuperClass (SuperClass super_class_object) {
        //What is done here?
    }
}
4

5 に答える 5

3

スーパークラスのコピー コンストラクターが必要なだけではありませんか?

public class SuperClass {
    protected int super_class_value;

    public SuperClass (int value) {
        this.super_class_value = value;
    }
    protected SuperClass (SuperClass super_class) {
        this.super_class_value = super_class.supper_class_value;
    }
}

public class Subclass extends SuperClass {
    protected int subclass_value;

    public SubClass(SuperClass super_class, int subclass_value) {
        super(super_class);
        this.subclass_value = subclass_value;
    }
}

コピー ctor の記述については、SO に関するこちらの質問も参照してください。

Javaにはデフォルトのコピーコンストラクタがありますか(C++のように)?

于 2015-02-11T20:18:00.503 に答える
0

内部に getter メソッドを追加して、コンストラクターSuperClassで使用できます。SubClass

public class SuperClass {
    protected int super_class_value;

    public SuperClass (int value) {
        this.super_class_value = value;
    }

    public int getSuperClassValue(){ return super_class_value;}
}

public class Subclass extends SuperClass {
    protected int subclass_value;

    public SubClass(SuperClass super_class, int subclass_value) {
        super(super_class.getSuperClassValue());
        this.subclass_value = subclass_value;
    }
}
于 2015-02-11T20:01:42.620 に答える