-1
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。这怎么可能?

4

2 回答 2

0

这是不可能的。基类永远不知道子类里面有什么,主要是因为它不知道它是从哪里继承的。这是因为继承也应该起作用。子类应该添加或修改基类的行为,并且基类应该包含所需的基本行为和属性。

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

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

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

  1. 在基类中,使您的 GetNumberOfWheels 方法抽象或虚拟,并强制派生类使用它。在这种情况下,您的派生类可能有也可能没有变量,但将被迫实现此方法。例如,您的派生类之一可能是 HoverCraft,它没有许多 wheel 变量。GetNumberOfWheels 方法可以根据您的实现需要返回 0 或引发异常。
  2. 我更喜欢这个,因为这是一种更清洁的方式。您可以拥有一个接口,该接口具有车轮数属性和 GetNumberOfWheels 方法。强制您的子类实现这一点。然后,每个派生类都可以提供自己的属性和方法实现,您可以根据需要使用它。
于 2012-11-23T18:12:55.317 回答
-1

那是不可能的,您只能使用“super”关键字从子类中引用超类的变量,反之亦然。超类永远不知道它的子类。

于 2012-11-23T17:56:48.507 回答