java - 为什么两种情况下的输出不同?

标签 java field shadowing member-hiding

为什么即使变量已被覆盖,以下情况下的输出也会不同?

public class A {
    int a = 500;

    void get() {
        System.out.println("a is " + this.a);
    }
}

public class B extends A {
    int a = 144;
}

public class mainmethod {
    public static void main(String args[]) {
        B ob = new B();
        System.out.println("a is " + ob.a);
        ob.get();
    }
}

最佳答案

不存在覆盖变量之类的东西。 B 实际上有两个 名为 a 的实例变量:一个是它声明的,另一个是它继承的。看这个:

B ob = new B();
System.out.println("B.a is " + ob.a);
System.out.println("A.a is " + ((A)ob).a);

B 的实例方法中,您可以编写 super.a((A)this).a 来访问父级的变量。

关于java - 为什么两种情况下的输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32350894/

相关文章:

SQL:创建新字段,填充查询结果

jquery - 在 jQuery 中存储和加载字段

c# - new 关键字在派生类中的工作原理

java - 我想要一个简单的教程网站来学习java中的图像?

java - python 与 java 在 Web 服务开发上的区别?

javascript - 使用 Dexie,我可以获取表中数组字段具有特定值作为其元素之一的所有对象吗?

java - 阴影的概念

java - 如何从父类(super class)中的方法访问(隐藏)子类中的成员变量?

java - StringTokenizer 无法与 BufferedReader 一起使用

java - 找出另一个数组列表中不存在的数组列表的元素