我正在尝试了解 Java 中的继承,但对这个示例感到困惑,因为在对象的同一实例中似乎存在两个不同的速度限制变量。一名来自父类(super class),一名来自子类。仍然只有一个对象,即 Honda3 对象(由自行车引用引用)。这是为什么?是否有两个不同的实例变量?
class Bike
{
int speedlimit=92;
public void showSpeedLimit()
{ System.out.println("From Bike: SL= "+ this.speedlimit); }
public void SetSpeedLimit(int limit)
{ this.speedlimit=limit;}
}
class Honda3 extends Bike
{
int speedlimit=150;
public void showSpeedLimit()
{ System.out.println("From Honda3: SL= "+ this.speedlimit); }
public void SetSpeedLimit(int limit)
{ this.speedlimit=limit; }
}
public class main2
{
public static void main(String args[])
{
Bike obj;//reference to Bike object
obj=new Honda3();// Honda3 object created and assigned to the reference variable named obj
System.out.println(obj.speedlimit);//90 Data member not overridden
obj.showSpeedLimit();//150 showing Honda3;
obj.speedlimit+=3;//95 Bike
System.out.println(obj.speedlimit);//95
obj.showSpeedLimit();//still 150
obj.SetSpeedLimit(155);// setting Honda3 object speedlimit to 155
System.out.println(obj.speedlimit);// still 95
obj.showSpeedLimit();//155
}
}
输出:
92 来自 Honda3:SL= 150, 95、 来自 Honda3:SL= 150, 95、 来自 Honda3:SL= 155**
最佳答案
- Java 不会覆盖变量。这就是每当您尝试打印 obj.speedlimit 时,它都会打印 Parent 的值,因为它是 Bike 的引用。
- 当您调用
showSpeedlimit
方法时,它会按预期工作,因为该方法已被重写。
关于java - Java中继承的同一个对象中具有相同身份的两个不同变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59480669/