为什么此代码不起作用?具体来说,为什么在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();

09-11 20:13