0

Java で子を兄弟にキャストしようとしています (ただし、これが許可されているかどうかはわかりません)。主に以下に書かれている内容です。

public interface BaseInterface {
    public int a = 5;
}

public class ClassA implements BaseInterface {
    public int a = 3;
}

public class ClassB implements BaseInterface {}

public static void main(String[] args) {
    BaseInterface a = new ClassA();
    ClassB b = (ClassB) a;
}

ClassCastException が発生し続けます。BaseInterface オブジェクト a から b にすべてのメンバー変数をコピーしようとしています。誰かがこれを行う方法について解決策を提供できますか? ありがとう!

4

3 に答える 3

4

これは不可能です。代わりに、次のコンストラクターを指定してコピーする必要がClassAあります。ClassB BaseInterface

public class ClassB implements BaseInterface {

    public ClassB(BaseInterface other) {
        //copy state from other instance
    }
}

public static void main(String[] args) {
    BaseInterface a = new ClassA();
    ClassB b = new ClassB(a);
}

ClassAもちろん、これは変換ではなく新しいオブジェクトにコピーしていることを意味しますが、からに移動したい場合は、これが唯一のオプションですClassB

于 2013-01-15T01:11:47.993 に答える
1

AClassAは ではないClassBので、もちろんこれは許可されません。すべての警告/エラーを抑制してコードをコンパイルしても、実行時にキャストによってClassCastException.

http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

于 2013-01-15T01:11:19.090 に答える
0
public interface BaseInterface {
    public int getA();
}

public class ClassA implements BaseInterface {
    private final int a;

    public ClassA(int a) {
        this.a = a;
    }

    public int getA() {
        return a;
    }
}

public class ClassB implements BaseInterface {
    private final int a;

    public ClassB(BaseInterface baseInterface) {
        this.a = baseInterface.getA();
    }

    public int getA() {
        return a;
    }
}

public static void main(String[] args) {
    BaseInterface a = new ClassA(5);
    ClassB b = new ClassB(a);
}

あなたがやりたいことをします。他の人が指摘したように、キャストは常に。を与えますClassCastException

于 2013-01-15T01:16:02.007 に答える