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

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

以上是 覆盖Java中的成员变量(变量隐藏) 的全部内容, 来源链接: utcz.com/qa/415249.html

回到顶部