引用子类实例变量

时间:2012-11-23 17:52:06

标签: inheritance

public abstract class Vehicle {

       public void drive(){
          spinTheWheels(subclass.getNumWheels());
       }

       public void spinTheWheels(int wheelsTotal){
          ....
       }
}

public class Car extends Vehicle {
     private final int numWheels = 4;

    ...
}

在上面的示例中,我想在车辆中引用Car的numWheels。这怎么可能?

2 个答案:

答案 0 :(得分:0)

这是不可能的。基类永远不知道子类中的内容,主要是因为它不知道它在哪里被继承。 这是因为继承应该起作用的方式。子类应该添加或修改基类的行为,基类应该包含所需的基本行为和属性。

编辑:添加内容以澄清OP的评论。

如果你希望基类有一个轮数的方法,那么很可能需要知道成员属性或名为NumberOfWheels的可变的存在。在这种情况下,您需要在基础Vehicle类中声明它。您将无法在派生类中声明此变量并在基类中使用它。

我可以看到你有两个选择,

  1. 在基类中,将GetNumberOfWheels方法设为abstract或virtual,并强制派生类使用它。在这种情况下,您的dervied classess可能有也可能没有变量,但将被迫实现此方法。例如,您的派生类之一可能是HoverCraft,它没有多个轮子变量。 GetNumberOfWheels方法可以返回0或根据您的实现需要抛出异常。
  2. 我更喜欢这个,因为这是一种更清洁的方式。您可以拥有一个具有轮数属性的接口和一个GetNumberOfWheels方法。强迫你的孩子上课。然后,每个派生类都可以提供自己的属性和方法实现,您可以根据需要使用它。

答案 1 :(得分:-1)

这不可能,您可以使用“super”关键字从子类引用超类的变量,但反之亦然。超类对它的子类一无所知。