栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

java对于抽象类的getClass()方法

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java对于抽象类的getClass()方法

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类的话,就是该类自己的名称。

最后,如果看到这篇笔记的大佬们,有什么更好的建议和指导,请在评论区中留言。感激不尽,谢谢!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/984930.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号