Java基础面试题:类继承的成员变量

时间:2022-06-01 18:50:59

有两个类:A和B

class A {
  String name = "a";

  String getName() {
    return this.name;
  }
}

class B extends A {
  String name = "b";

  String getName() {
    return this.name;
  }
}

public static void main(String[] args) {
  A a = new B();
  System.out.println(a.name);
  System.out.println(a.getName());
}

请问程序输出的值是什么?

这道题主要是考类的成员变量和成员方法的多态特性。

答案是:

a
b

在Java里,成员变量没有多态,不可以被覆盖。a.name实际调用的是类型A的属性name。

而成员方法是会被覆盖,a.getName()调用的是实例B里的方法getName()。