你能帮我理解下面代码eof
中打印的内容吗?
即使我提到System.out.println(super.getClass().getName());
,我也会看到"PrintSubClass3"
打印出来。
super
答案 0 :(得分:1)
super.getClass()
调用父类定义的方法getClass()
(忽略您在类本身中定义的任何getClass
方法 - 不确定是否可以使用{ {1}},可能是getClass
)。
这最终调用final
,它返回实例的运行时类(就是它的实例,Object#getClass
)。
所有PrintSubClass3
所做的就是让您调用您无法覆盖的方法的实现,因为您已覆盖它们。在这里,它是多余的,因为super
和this.getClass()
最终会采用相同的方法。
答案 1 :(得分:0)
getClass()
方法返回此Object的运行时类。换句话说,你的obj对象,它是类名PrintSubClass3
的对象。因此,它将返回PrintSubClass3
。
所以在你的课堂内打电话,它会给你自己的课程,即使有super
个关键字。有super关键字,它将转到它的superClass来查找方法getClass(),但由于它没有在superClass中显式实现,getClass()方法将工作,因为文档说〜它将返回对象的运行时类。
如果你真的想要打印你的superClass的名字,你应该这样做
System.out.println(super.getClass().getSuperclass());
我希望这会清除你的困惑。
打印班级名称的理想方式是什么?
只需输入此内容(您可以不使用超级关键字打印)
System.out.println(getClass().getName()); //Prints your local class
System.out.println(getClass().getSuperclass()); //Prints your superClass