在这种情况下,我可以访问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节),否则会发生编译时错误。