加载子类时,父类做了什么?

来源:互联网 发布:论文盒子软件好用吗 编辑:程序博客网 时间:2024/06/13 23:32

在做android或者java开发时,我们很少考虑到类加载的事情,因为这些事情,虚拟机都帮我们做了。

可是,你有没有想过,当我们new了一个子类的时候,父类是个什么情况?

我们先说一下加载类时机。“类的代码在初次使用时才加载”,一般就是在我们new实例、使用静态域或者使用静态方法的时候去加载class文件。

当我们new一个子类时,要去加载子类,可是在加载子类时,发现了extends关键字,说明有父类,那么先去加载父类,以此类推,一直加载到Object。所有相关类加载完之后,从根基类开始执行静态变量、静态代码块,然后是下一个导出类,以此类推。静态方法在加载类的时候就会加载到内存静态存储区,无需构造类的实例就可以调用。至此,所有的类都已经加载完成,可以开始实例化了,实例化时,先从根基类的构造方法开始执行起,然后是下一个导出类,以此类推。在这个过程中,需要注意的是,虽然执行了父类的构造方法,但是没有生成父类的对象,“执行构造方法是为生成对象初始化的,并不是生成对象”。其实,最终只new了一个子类对象出来。

这里需要说明的是,权限问题,我们知道有四种权限:public、protected、private、默认权限。我觉得,在继承的时候,子类能把父类所有的东西都继承下来,只不过,有些东西子类不能访问而且也看不到,比如用private修饰的父类成员变量和成员方法,如果不是这样,就不叫继承了。

0 0
原创粉丝点击