Jos*_*zet 0 java oop inheritance casting
我知道这个问题听起来很困惑。让我澄清一下。
class Car ...
class Mercedes extends Car ...
class Porsche extends Car ...
class Warehouse{
Car car;
}
class WarehouseX extends Warehouse{
public static void main(){
((Mercedes) super.car).doMercedesStuff();
}
}
Run Code Online (Sandbox Code Playgroud)
看一下这个虚构的例子。梅赛德斯和保时捷都是汽车。每个仓库都拥有一辆汽车。现在,WarehouseX有一个奔驰。但是,WarehouseX从Warehouse继承了通用汽车。在这辆车上调用特定梅赛德斯方法的最佳方法是什么。一种方法是将其投放到梅赛德斯奔驰,但这对我来说似乎很丑。有没有更好的方法可以做到这一点?
由于每个仓库只能拥有一种特定的汽车类型,因此可以使用通用名称:
class Warehouse<T extends Car>{
T car;
}
class WarehouseX extends Warehouse<Mercedes>{
//do mercedes stuff
}
Run Code Online (Sandbox Code Playgroud)
现在,WarehouseX可以访问super.car并将其用作Mercedes,因为继承保证了它。
编辑:既然人们在谈论抽象方法:汽车应该实现一种通用方法并声明抽象方法,如果每辆特定的汽车都需要提供它们。如果只有特定汽车的子集需要一种方法,例如openBackDoors(),则应该声明一个扩展Car的新类。