java - Java中继承的同一个对象中具有相同身份的两个不同变量

标签 java inheritance member

我正在尝试了解 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**

最佳答案

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

关于java - Java中继承的同一个对象中具有相同身份的两个不同变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59480669/

相关文章:

java - Play Framework 2.1.0 看不到派生类中的静态方法

c++ - 关于 C++ OOP 数组成员复制行为

c++ - 类私有(private)成员 - 数组访问失败

java - 在注册表中找不到数据格式 - Camel

java - 网络爬虫,反馈?

Python 如何覆盖子类中的类成员并从父类访问它?

c++ - 如何调用函数指针数组中的函数?

java - 是否有简单的 Java Regex (*SKIP)(*F) 替代方案?

java - PKIX 路径构建失败错误在 Oracle JDK 上仍然存在

django - Django多表继承VS在模型中指定明确的一对一关系