如何达到扩展类的功能?

时间:2012-03-26 12:42:13

标签: java oop inheritance object

我有一个车辆类。从Vehicle,我扩展了Car class(以及其他一些如Bus,Bike ..)。现在在我的应用程序中,我不知道用户想要使用哪种车辆。所以我创建了一个Vehicle对象,然后将其设置为正确的对象(Car,Bus,...)。之后,我想调用一些Car的功能 - 但我无法达到它。为什么呢?

Vehicle vehicle=null;
. . .
vehicle=new Car();
vehicle.someMethodFromCar(); //can't reach it

4 个答案:

答案 0 :(得分:7)

我们必须施展:

((Car) vehicle).someMethodFromCar(); //we can reach it

vehicle仍被声明为Vehicle类型。如果您指定Vehicle的子类型,则不会更改。并且Vehicle类没有Car类中的额外方法。转换是从子类型调用方法的方法。

答案 1 :(得分:3)

你的引用是由它的声明类型定义的,所以在你的情况下,你有一个赋予Car对象的Vehicle引用vehicle,但是java只能看到引用的类型,所以你不能访问任何引用汽车的方法。 为此,您需要将对象分配给Car变量,或者将引用转换为Car。

答案 2 :(得分:1)

为了达到该方法,您必须将vehicle投射到Car

答案 3 :(得分:1)

有两种方式:

  1. 将车辆视为抽象类。在车辆类中将常用方法定义为抽象。因此,当您扩展车辆时,子类需要实现抽象方法。所以,当你做的时候

    Vehical v = new Car();

    v.someOverrideMethod(); 它将调用汽车的方法。

  2. 覆盖您希望在子类中运行时访问的方法。所以,当你喜欢的时候,

    Vehical v = new Car();

    v.someOverrideMethod();

  3. 在运行时,JVM将查看其对象是否已创建,并且该对象的方法将在运行时调用。