java - Java 中覆盖成员变量(变量隐藏)

标签 java overriding

我正在研究 Java 中的重写成员函数,并考虑尝试重写成员变量。

所以,我定义了类

public class A{
    public int intVal = 1;
    public void identifyClass()
    {
        System.out.println("I am class A");
    }
}

public class B extends A
{
    public int intVal = 2;
    public void identifyClass()
    {
        System.out.println("I am class B");
    }
}

public class mainClass
{
    public static void main(String [] args)
    {
        A a = new A();
        B b = new B();
        A aRef;
        aRef = a;
        System.out.println(aRef.intVal);
        aRef.identifyClass();
        aRef = b;
        System.out.println(aRef.intVal);
        aRef.identifyClass();
    }
}

输出为:

1
I am class A
1
I am class B

我无法理解为什么当 aRef 设置为 b intVal 时仍然属于 A 类?

最佳答案

当您在子类中创建同名变量时,这称为隐藏。生成的子类现在将具有这两个属性。您可以使用 super.var((SuperClass)this).var 从父类(super class)访问该变量。变量甚至不必是同一类型;它们只是共享一个名称的两个变量,很像两个重载方法。

关于java - Java 中覆盖成员变量(变量隐藏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60878638/

相关文章:

java - 内联扩展通用抽象 Template 类

c++ - 如何将 override 关键字添加到大型 C++ 代码库?

java - 无论如何,我们从 servlet 知道客户端是否仍在等待

java - 属性和多态性

java - 为什么子类已经覆盖了父类的静态方法,还要调用父类的静态方法?

C++覆盖具有与基类不同的返回类型的函数

css - Material UI Styled() - 如何设置子组件的样式

java - 将字符串转换为 java.util.Date

java - 两种身份验证机制 : Kerberos and HTTP basic

swing - JComboBox 项目更改