在这种情况下,我可以访问CarSubClass的重写/附加方法吗?

public Car getCar(){
CarSubClass carSub = new CarSubClass();
return carSub;
}




更新:

汽车具有子类SubClass1,SubClass2,SubClass3。

getCar()可以返回SubClass1,SubClass2或SubClass3。

我可以这样做吗:

Car car = getCar();

switch(car.getType()){//getType() returns a byte

case SubClass1:

SubClass1 car1 = (SubClass1)car;
break;

case SubClass2:
SubClass car2 = (SubClass2)car;
break;

case SubClass3:
SubClass3 car3  =(SubClass3)car;
break;

default: //don't do anything

}

最佳答案

仅覆盖的方法:

Car car  = getCar();
car.method(); // here you can invoke only the overridden methods in CarSubClass


您不能调用引用类型CarSubClass不了解的Car其他方法。在编译过程中它将失败。

可能这是可能的,但是您必须确定自己在这里做什么:

CarSubClass c = (CarSubClass)getCar();
c.subClassSpecificMethod();


在您的情况下,上面的转换是安全的,因为该方法始终返回CarSubClass的实例。最好执行检查。

Car c = getCar();
if(c instanceof CarSubClass){
    ((CarSubClass)c).subClassSpecificMethod();
}




switch(c.getType())

这不是有效的切换键。

JLS§14.11


  表达式的类型必须为char,byte,short,int,Character,Byte,Short,Integer,String或枚举类型(第8.9节),否则会发生编译时错误。

09-26 11:28