考虑以下类别:
public class Phone {
private boolean has3g;
public boolean has3g() {
return has3g;
}
public void setHas3g(boolean newVal) {
has3g = newVal;
}
}
public class Blackberry extends Phone {
private boolean hasKeyboard;
public boolean hasKeyboard() {
return hasKeyboard;
}
public void setHasKeyboard(boolean newVal) {
hasKeyboard = newVal;
}
}
如果我要创建的实例Blackberry
,则将其强制转换为Phone
对象,然后再强制转换为Blackberry
,原始Blackberry
对象会丢失其成员变量吗?例如:
Blackbery blackbery = new Blackberry();
blackbery.setHasKeyboard(true);
Phone phone = (Phone)blackbery;
Blackberry blackberry2 = (Blackberry)phone;
// would blackberry2 still contain its original hasKeyboard value?
boolean hasKeyBoard = blackberry2.hasKeyboard();
强制转换完全不会改变基础对象-只是向编译器发送一条消息,可以将A
视为B
。
也不必将if 强制A
转换为B
if A extends B
,即不需要将子类型强制转换为其超类型;如果是从超类型到子类型的,则只需要强制类型转换
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句