2013-01-15 29 views
0

我想把孩子抛给Java中的兄弟姐妹(虽然我不确定是否允许)。基本上是写在下面:把孩子抛给不同的孩子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。有人可以提供解决方案如何做到这一点?谢谢!

+2

两个字:复制构造函数。 – jlordo

回答

2

A ClassA不是ClassB,所以当然这是不允许的。即使您禁止所有警告/错误并获取代码进行编译,在运行时,演员阵容将导致ClassCastException

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

+0

如果你不建议修理什么,这不应该成为评论吗? –

+2

没有什么可以修复的... –

+0

复制构造函数是一种实现OP所要求的方法吗? –

4

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

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