我正在尝试将一个孩子投入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。有人可以提供如何做到这一点的解决方案吗?谢谢!
答案 0 :(得分:4)
这是不可能的。相反,您应该ClassA
和ClassB
copy constructors提取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
,这是唯一的选择。
答案 1 :(得分:2)
ClassA
不是ClassB
,所以当然不允许这样做。即使您取消所有警告/错误并获取要编译的代码,在运行时,强制转换也会导致ClassCastException
。
http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
答案 2 :(得分: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
。