为什么这段代码不起作用?具体来说,为什么在if语句之外完成的类型转换不在其中。
private SuperType currObj;
public void someMethod(SuperType currObj){
if(currObj instanceof aSubType){
currObj = (aSubType) currObj;
if (true){
currObj.someMethodofaSubtype();
}
}
}
答案 0 :(得分:4)
行currObj = (aSubType) currObj
实际上没有任何净效应。为了调用someMethodofaSubtype()
,编译器想要知道该对象确实是aSubType
类型。演员表并没有真正改变底层对象。转换然后将转换结果存储为aSubType
类型的新变量就可以了。你可能想要这样的东西:
aSubType subCurrObj = (aSubType) currObj;
subCurrObj.someMethodofaSubtype();
答案 1 :(得分:0)
为了使类型转换生效,您需要将引用存储在正确类型的变量中。您已从SuperType转换为aSubType,但随后将结果存储在SuperType变量中,该变量会自动重新强制转换。
你想:
aSubType subObject = (aSubType)currObj;