从父类对象调用子类方法的最佳实践

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继承了通用汽车。在这辆车上调用特定梅赛德斯方法的最佳方法是什么。一种方法是将其投放到梅赛德斯奔驰,但这对我来说似乎很丑。有没有更好的方法可以做到这一点?

Lec*_*agy 5

由于每个仓库只能拥有一种特定的汽车类型,因此可以使用通用名称:

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的新类。