Java中具有继承的同一对象中具有相同标识的两个不同变量

Java中具有继承的同一对象中具有相同标识的两个不同变量,java,inheritance,member,Java,Inheritance,Member,我试图学习Java的继承,但被这个例子弄糊涂了,因为在同一个对象实例中似乎存在两个不同的speedlimit变量。一个来自超级类,一个来自子类。仍然只有一个对象,一个Honda3对象(由自行车引用引用)。这是什么原因?有两个不同的实例变量吗 class Bike { int speedlimit=92; public void showSpeedLimit() { System.out.println("From Bike: SL= "+ this.speedlimi

我试图学习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**

  • Java不重写变量。这就是为什么每当您尝试打印obj.speedlimit时,它都会打印parent的值,因为它是Bike的参考
  • 当您调用
    showSpeedlimit
    方法时,它会按预期工作,因为该方法已被重写
  • Java不重写变量。这就是为什么每当您尝试打印obj.speedlimit时,它都会打印parent的值,因为它是Bike的参考
  • 当您调用
    showSpeedlimit
    方法时,它会按预期工作,因为该方法已被重写
    在Java中,您可以在子类中重写父类的方法。这是调用方法重写。不能重写类的属性。在本例中,有两个实例变量,一个来自基类,另一个来自父类。只创建一个对象

           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 Base class attribute value is printed
    
        obj.speedlimit+=3;//95 Bike Base Class attribute value is updated
              System.out.println(obj.speedlimit);//95
    
    obj.SetSpeedLimit(155);// Child class attribute value is updated speedlimit to 155
    

    在Java中,您可以在子类中重写父类的方法。这是调用方法重写。不能重写类的属性。在本例中,有两个实例变量,一个来自基类,另一个来自父类。只创建一个对象

           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 Base class attribute value is printed
    
        obj.speedlimit+=3;//95 Bike Base Class attribute value is updated
              System.out.println(obj.speedlimit);//95
    
    obj.SetSpeedLimit(155);// Child class attribute value is updated speedlimit to 155
    

    int speedlimit=150
    为类声明了第二个成员变量
    Honda3
    是否有两个不同的实例变量?:是:一个在基类中,一个在子类中:
    int speedlimit=92
    int speedlimit=150
    int speedlimit=150
    为类声明了第二个成员变量
    Honda3
    是否有两个不同的实例变量?:是:一个在基类中,一个在子类中:
    int speedlimit=92
    int speedlimit=150@Grandalfion如果能解决您的问题,请接受答案。@Grandalfion如果能解决您的问题,请接受答案。