Java继承为什么这个toString打印BB而不是AB,AB?
我正在执行这个,我不明白为什么这会在两行中执行和打印BBJava继承为什么这个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(); }
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。