Java(4):Java中super和super.getClass()的简介


情景再现

这两天,一直看Java,结果在继承这块遇到了一个问题,就是使用super调用getClass()这个方法的时候,打印出来的结果却是当前类的类名.如下代码和打印结果所示.

public class People {

    public static void main(String[] args) {
        
        NewPeople newPeople = new NewPeople();
        newPeople.printClassName();
    }
}

class NewPeople extends People {
    
    public void printClassName() {
        
        System.out.println(super.getClass());       
    }
}
打印结果:NewPeople


问题分析

我们分析出现问题的可能就是只有两个方向,一个是super,另外一个就是getClass().

我们先说一下super的概念,super并没有代表超类的一个引用的能力,只是代表调用父类的方法而已。也就是说,你可以使用super来调用父类的方法和属性,但是super并不能代表父类.

那么,这个super概念的解释又有何用呢?我们再看一下getClass()的API中的解释吧,首先在API中getClass()这个方法被定义成** final,也就说这个方法不能被子类重写.并且在API明确指出返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象**,如下图所示.

</br>
综合上面两点,我们分析出,被static synchronized 方法锁定的对象就是当前类,而且getClass()不管什么对象调用,都是调用Object类中的方法(getClass()不能被重写).所以不管是super.getClass()还是this.getClass()返回的结果都是当前类.

那么想要得到父类,我们该怎么办呢?我们可以使用如下来表示.

XXX.getClass().getSuperClass()




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,595评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,947评论 0 62
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,618评论 0 11
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 5,051评论 0 2
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,873评论 0 9

友情链接更多精彩内容