将孩子投射到不同的孩子Java

时间:2013-01-15 01:09:58

标签: java casting

我正在尝试将一个孩子投入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。有人可以提供如何做到这一点的解决方案吗?谢谢!

3 个答案:

答案 0 :(得分:4)

这是不可能的。相反,您应该ClassAClassB 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