是否有解决方法允许我将基类的对象强制转换为派生类的对象?
类似于以下内容
B extends A
A a = new A();
B b = (B)a
有没有可以实现这一目标的技巧?
答案 0 :(得分:3)
B
中声明但A
中未声明的任何字段的值是什么?例如,您期望这样做:
Object x = new Object();
String text = (String) x;
System.out.println(text);
Object
没有文字数据......那么将其作为字符串投射是什么意思?
您只能将引用转换为适合该对象的实际类型的类型。
这样做的愿望通常表明某处存在设计问题......或者可能意味着你想要的东西:
public class A {
public A() {
// Whatever
}
public A(A a) {
// Use the existing values in "a" to initialize this object
}
}
public class B extends A {
/** Creates a new B from the values in an A, with suitable defaults. */
public B(A a) {
super(a);
// Now initialize any fields in B with appropriate values
}
}
然后:
A a = new A();
B b = new B(a);
这将创建两个对象,与演员不同......但它至少是有效的。
答案 1 :(得分:1)
怎么可能呢?想一想。这就好比如说你有一个班级FourWheeler
,你可以简单地把它变成Ferrari
并把它变成法拉利!
答案 2 :(得分:0)
不,这是不可能的。当B扩展A时,它继承了A的行为,但同时,没有什么能阻止你定义B的新行为(那些新行为不会成为A的一部分)
例如,假设A有一个名为'methodA'的方法。现在,当B扩展A时,它继承'methodA',但它也声明了另一个名为'methodB'的方法。因此,在这种情况下,当您尝试在对象A的实例上调用'methodB'时,将获得运行时'ClassCastException'。