在 Java 中重写成员变量(变量隐藏)

2022-08-31 13:25:27

我正在研究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类?


答案 1

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


答案 2

变量在Java中不是多态的;它们不会相互覆盖。


推荐