0x01 子类可以使用父类的哪些成员
- 父类的public,子类可以继承
- protected也可以继承,不同包也能继承
- 如果子类与父类在同一个包中,子类可以继承父类的默认成员,但是不能继承不同包中的父类的默认成员
- private是不能继承的
- 父类的构造器,子类也不能继承,因为构造器必须跟当前类名相同
0x02 方法的覆盖
子类扩展了父类,就获得了父类的方法和成员,如果父类有些方法不适用于子类,可以重新定义这个方法,叫做方法的覆盖。
- 覆盖的原则
- 覆盖的方法必须跟父类当中的方法名相同
- 返回类型要相同
- 访问权限不能比父类小
0x03 继承的内存分析
在类加载字节码时,会先判断有没有父类,如果有,会先把父类加载成字节码放到内存中,然后再把自己加载到内存中
0x04 this和super的对比
- super()和this()构造方法都必须放在第一行
- super和this不能同时一起使用
- 子类的构造方法中默认都有一个super(),尽管没有显示出来。
0x05 隐藏
- 子类跟父类有相同的变量名,叫做隐藏,子类通过”super.字段”来访问父类的成员
- 子类跟父类当中有相同的静态方法,称方法的隐藏
- 本垒字段隐藏:方法参数和本类字段名相同,使用”this.字段”来解决