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

这是不可能的。相反,您应该给ClassAClassB 复制构造函数,采用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);
}

当然,这意味着您要复制到新对象而不是转换,但如果您想从 aClassA转到 a ,这是唯一的选择ClassB

于 2013-01-15T01:11:47.993 回答
1

AClassA不是 a 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 回答