为什么此代码不起作用?具体来说,为什么在if语句外部进行的类型转换不包含在其中。
private SuperType currObj;
public void someMethod(SuperType currObj){
if(currObj instanceof aSubType){
currObj = (aSubType) currObj;
if (true){
currObj.someMethodofaSubtype();
}
}
}
最佳答案
currObj = (aSubType) currObj
行实际上没有任何净效果。为了调用someMethodofaSubtype()
,编译器希望知道该对象确实是aSubType
类型。强制转换并不会真正更改基础对象。强制转换,然后将强制转换的结果存储为aSubType
类型的新变量将可以解决问题。您可能想要类似:
aSubType subCurrObj = (aSubType) currObj;
subCurrObj.someMethodofaSubtype();