今天想要分享的知识点是:
类的继承:
子类能够继承长辈(不一定直接父类)的非私有东西(属性和方法),
子类不是拥有长辈的东西,只是子类对长辈类中的东西有访问性,只有类中的东西是自己的.
这一点颠覆了我原来的认知相信一定有很多朋友和我一样.
子类在new的过程中:
- 先去loadclass中,子类和父类会进入方法区(可以设置断点跟踪来验证)
- New 子类()构造,会自动去父类构造中,执行完父类的构造,父类对象会出现在堆区,而父类的对象出现,只不过没有名字.在堆区中,父类中的属性值初始化分配空间.
- 执行完父类构造体,在自动执行子类的构造体,执行完毕,为子类在堆中申请空间,并且初始化子类中的属性值.
上述过程也验证了两个观点:
- 为什么要少用继承?因为在调用子类的过程,他的长辈类也同时分配空间,而如果逻辑层次多的话,长辈类中的方法子类并不一定都要使用,这样就会浪费空间.
- 第二个观点就是子类并不是拥有了父类的东西,而只是对他们有访问性,因为长辈类也拥有自己的内存空间,只不过没有名字而已.