Inheritance 引用子类实例变量
在上面的例子中,我想引用车辆中汽车的numWheels。这是怎么可能的?这是不可能的,您只能使用“super”关键字从子类引用super类的变量,反之亦然。超级类从不知道它的子类的任何信息。这是不可能的。基类永远不知道子类内部是什么,主要是因为它不知道在哪里继承了它。 这是因为继承的工作方式也是如此。子类应该添加或修改基类的行为,基类应该包含所需的基本行为和属性 编辑:添加内容以澄清OP的评论 如果希望基类有一个轮子数的方法,那么很可能需要知道成员属性或名为NumberOfWheels的变量的存在。在这种情况下,您需要在基本车辆类中声明这一点。您将无法在派生类中声明此变量并在基类中使用它 我可以看到你有两个选择Inheritance 引用子类实例变量,inheritance,Inheritance,在上面的例子中,我想引用车辆中汽车的numWheels。这是怎么可能的?这是不可能的,您只能使用“super”关键字从子类引用super类的变量,反之亦然。超级类从不知道它的子类的任何信息。这是不可能的。基类永远不知道子类内部是什么,主要是因为它不知道在哪里继承了它。 这是因为继承的工作方式也是如此。子类应该添加或修改基类的行为,基类应该包含所需的基本行为和属性 编辑:添加内容以澄清OP的评论 如果希望基类有一个轮子数的方法,那么很可能需要知道成员属性或名为NumberOfWheels的变量的存
好的,谢谢,很公平。但是假设我想强制在Car子类中声明numWheels。我可以使用:abstract int getNumWheels();例如,在Vehicle类中,强制在Car中实现getNumWheels()方法。强制声明变量是否有一个等价的方法?我不知道基类中还有哪些需要继承的需求,但这里似乎没有什么不一致之处。我将编辑上面的答案以提供更多细节。
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;
...
}