首页 > 解决方案 > 在Java中具有继承的同一对象中具有相同标识的两个不同变量

问题描述

我正在尝试学习 Java 中的继承,并被这个例子弄糊涂了,因为在对象的同一个实例中似乎存在两个不同的 speedlimit 变量。一个来自超类,一个来自子类。仍然只有一个对象,一个 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**

标签: javainheritancemember

解决方案


  1. Java 不会覆盖变量。这就是每当您尝试打印 obj.speedlimit 时它会打印 parent 的值的原因,因为它是 Bike 的引用。
  2. 当您调用该showSpeedlimit方法时,它会按预期工作,因为该方法已被覆盖。

推荐阅读