Java继承为什么这个toString打印BB而不是AB,AB?

时间:2016-10-23 23:10:50

标签: java inheritance

我正在执行此操作,我无法理解为什么会执行此操作并在两行中​​打印BB。

class A {
    public String toString(){
        return this.getClass().getSimpleName();
    }
}

class B extends A {

    public String toString(){
        return super.toString() + this.getClass().getSimpleName();
    }
}

public class Main {
  public static void main(String[] args) {

    A a = new B();
    B b = new B();
    System.out.println(a);
    System.out.println(b);
  }
}

1 个答案:

答案 0 :(得分:3)

java中每个对象只有一个类名。如果你想知道超类的名字,你必须使用:new B()

由于这两个对象都是super.toString(),因此如果您正在调用toString()B并不重要,则两者都将返回类getClass()的名称,因为{ {1}}始终返回您使用new创建的类的名称。