我正在研究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.var
((SuperClass)this).var