java对于抽象类的getClass()方法
背景:
在阅读flink1.14
的源代码的时候,有一段代码的getClass()方法输出的结果很让我意外。在此记录一下,代表我经历过
首先定义一个抽象类,在这个无参的构造函数中调用了一个getClass().getName()
的方法获取当前的类名
public abstract class Parent {
public Parent(){
System.out.println(getClass().getName());
}
}
新建一个主类App
,在里面新建一个Parent
对象
public class App {
public static void main(String[] args) {
new Parent(){};
}
}
因为这个Parent
是一个抽象类,所以在new
这个对象的后面加上一个{}
输出结果为:
com.test.App
看到这个结果的时候,我当时觉得很奇怪,因为在我的理解中,getClass().getName()
这个方法写在Parent
类的里面,所以输出的结果应该为com.test.Parent
才对。
后面,我新建了一个如下所示的类(非抽象类),该类中继承了Parent
public class Son extends Parent {
public Son(){
super();
}
}
接下来在App
类中改为如下所示:
public class App {
public static void main(String[] args) {
new Son();
}
}
输出的结果为:com.test.Son
将Parent的abstract的修饰符去掉
Parent
类:
public class Parent {
public Parent(){
System.out.println(getClass().getName());
}
}
Son
类:
public class Son extends Parent {
public Son(){
super();
}
}
主类:
public class App {
public static void main(String[] args) {
new Parent();
new Son();
}
}
输出的结果为:
com.test.Parent
com.test.Son
总结:
在抽象类中像上述情况下调用了getClass()方法之后,这个获取的class就是能够实例化抽象类的子类的类名名称
。
如果是普通的Java
类的话,就是该类自己的名称。
最后,如果看到这篇笔记的大佬们,有什么更好的建议和指导,请在评论区中留言。感激不尽,谢谢!