美文网首页
Java(4):Java中super和super.getClas

Java(4):Java中super和super.getClas

作者: 神经骚栋 | 来源:发表于2017-07-13 10:33 被阅读600次
    情景再现

    这两天,一直看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()
    

    相关文章

      网友评论

          本文标题:Java(4):Java中super和super.getClas

          本文链接:https://www.haomeiwen.com/subject/ucqwhxtx.html