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

有两个类: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()。

版权声明:著作权归作者所有。

相关推荐

Java 10:类型推断局部变量var

Java 10将新增特性:类型推断的局部变量声明var。java9以及之前的版本,声明一个局部变量需要显式声明它的类型。Java 10引入了新的变量声明关键词var,使用它不需要我们显式声明局部变量的类型,它会自动推断出局部变量的类型。Java 9示例:import java.util.*; public class Java9&nbs

Kotlin:类的定义

基本定义Kotlin使用关键词class定义类,如:class User { } 声明类主要包括三部分:类名:必选,类的名称,一般以大写字母开头。类头:可选,类头包括type parameter(如泛型),主构造(primary constructor)等。类体:可选,在Kotlin,类体是可选的,它有大括号{}括起来。类头和类体是可选的,一个最简单的类可