我正在研究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
从超类访问一个。变量甚至不必是同一类型。它们只是两个共享名称的变量,就像两个重载方法一样。