【问题标题】:Variable inheritance in Java (Beginner)Java中的变量继承(初学者)
【发布时间】:2012-01-15 18:38:31
【问题描述】:

我有一个带有变量bool var = true 和getter 方法getVar() 的A 类。 我正在尝试创建一个扩展 A 并将 var 重新定义为 bool var = false 的类 B。代码:

public class A{
    protected boolean var = true;
    public boolean getVar(){
        return var;
    }
}

public class B extends A{
    protected boolean var = false;
}

问题是如果我执行:

B b_class = new B();
System.out.println(b_class.getVar());

我获得了true,但我不明白为什么。我做错了什么?

【问题讨论】:

  • 你不能做B.getVar(),因为这个方法不是静态的。我假设您的意思是 b_class.getVar() 并修复了它。

标签: java variables inheritance


【解决方案1】:

您不会“继承”变量; B.var 仅隐藏 A.var,但仅隐藏在 B 中。你正在调用getVar(),这是A中的一个方法,它看到A.var,也就是true

【讨论】:

    【解决方案2】:

    您在 B 中声明了一个新的 var 字段,该字段隐藏了 A.var。试试这个:

    public class B extends A {
        public B() {
            var = false;
        }
    }
    

    【讨论】:

      【解决方案3】:

      您不应该在重写的类中创建新的实例变量,因为超类 (A) 看不到它,因此当调用 getVar() 时,它将返回它可以看到的值.相反,您应该在构造函数中将 var 的值设置为您想要的值。

      public B() {
          var = false;
      }
      

      【讨论】:

        【解决方案4】:

        在超类中初始化的变量不能这样改变。您已经声明 protected boolean var = true。因此,无论您在扩展课程中做什么,它都会向您展示真实的。

        【讨论】:

          【解决方案5】:

          GetVar 未在 B 中定义,因此多态性跳转到 var 为真的 A。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-05-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-15
            • 1970-01-01
            • 1970-01-01
            • 2018-09-19
            相关资源
            最近更新 更多