Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java继承为什么这个toString打印BB而不是AB,AB?_Java_Inheritance - Fatal编程技术网

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

Java继承为什么这个toString打印BB而不是AB,AB?,java,inheritance,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(); }

我正在执行这个,我不明白为什么这会在两行中执行和打印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);
  }
}

在java中,每个对象只有一个类名。如果想知道超类的名称,必须使用:
getClass().getSuperclass().getSimpleName()


由于这两个对象都是
new B()
,无论您是调用
super.toString()
还是
toString()
,它们都将返回类
B
的名称,因为
getClass()
始终返回使用
new

创建的类的名称,因为这两次都是类B的对象。为什么?因为
A A=newb()
,所以
a
实际上是
B
的一个实例,是的,但是为什么不调用父超类,因为它的类名是a??它是一个小循环@SantiagoM super调用a的toString,它调用getClass。现在getClass返回B,因为对象的类型是B。