总结创建子类时是否创建父类

来源:互联网 发布:产品上淘宝要什么手续 编辑:程序博客网 时间:2024/06/05 02:33
更正:不好意思,我又试验了一下,super并不能引用子类成员方法,修改如下:

       根据我的理解,首先说一下对象的构造过程:

1.首先从根类到直接父类依次执行父类的构造方法(没有显示调用构造方法的情况下),这个过程执行父类成员的初始化。

2.最后调用本类的构造方法。

以上两步的结果是创建了本类对象,这个对象如图:


从图中可知,压根没有父类对象,只有子类对象,而且this完全引用这个对象,super只是引用了这个对象中从父类继承来的成员,也就是说,除了super不能访问子类定义的成员之外,super和this是同一个对象,这可以通过toString()方法验证(如果子类没有重写toString()方法,则调用父类的该方法,如果父类没有,再找父类的父类,直到Object的toString()方法)。

Object类toString方法:

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

getClass 和 getName 都是Object类的方法。

总之,没有super这个对象,他只是引用了子类对象的一部分数据,所有无法输出super。
那么为什么能输出super.toString()呢,原因在前面图中,这个调用过程是先试图调用从子类对象中直接父类继承的toString方法(注意:super.toString()是显式调用),如果没有则向上追述知道Object。
0 0
原创粉丝点击