继承性
继承的好处:
1.减少代码的冗余
2.提高代码的复用性
3.继承是多态的前提
什么时候可以使用继承?
当类与类之间存在大量相同的内容时。需要满足子类是父类中的一种(is a的关系)。 就可以将子类中重复的内容抽取到父类-这时子类就可以继承父类。
继承的格式 :
[修饰符] class 类名A extends 类名B
A类叫作子类-subClass
B类叫作父类-SuperClass
继承内存说明:
说明:
1.当子类继承父类后就拥有了父类中的实例变量和实例方法。
2.子类继承父类后也可以增加自己(子类)的属性和方法--子类比父类更强大
3.子类继承父类后父类中的属性和方法被private修饰, 子类就不能直接调用但我们还是认为子类继承了父类中私有的属性和方法(可以间接调用)。
4.java是单继承。一个子类只可以有一个父类。但是一个父类可以有多个子类。
5.子类除了可以继承直接父类中的实例变量和实例方法外还可以继承间接父类中的。
6.如果一个类没有显示继承其它类那么默认继承Object类。Object类是所有类的父类。
7.子类和父类一定要存在“is a”的关系(不要为了继承而继承)。
-
子类可以直接使用父类的静态成员(共享)
调用静态属性和方法用 this.名
快捷键 : 查看继承关系 :
ctrl +alt + u (图)
ctrl + H (继承树-家谱)
方法重写
方法的重写 :
当子类继承父类后如果子类对父类中的方法不满意(无法满足子类需求)可以考虑方法的重写
当子类重写父类的方法后再通过子类的对象调用此方法调用的是子类重写的方法。
如何方法重写? 可以直接将父类中要被重写的方法复制到子类中即可(大部分都这样用)
================================================================
在方法的重写时要注意的细节
1.父类被重写的方法和子类重写的方法,方法名和形参列表必须一致。
2.父类被重写的方法的返回值和子类重写方法的返回值
被重写的方法 重写方法
void void
基本数据类型 对应的基本数据类型
---------------------------------
引用数据类型 要小于等于父类被重写方法的返回值类型(A3 继承 A2 继承 A1)
A2 A2和A3
因为继承A1之后A2可能会添加一些别的东西进行扩展,A3对A2也是如此,所以A1是父、A2是子、A3是孙辈,但是包含的内容A1<=A2<=A3,重写A2的类时可以返回A2 A3 不能返回A1,因为有些数据可能返回不到,而A2 A3 肯定都包含在内
---------------------------------
3.子类重写方法的权限修饰符>=父类被重写方法的权限修饰符
权限修饰符 : private -> 缺省的 -> protected -> public
================================================================
注意:
1.私有方法不能被子类重写
2.final修饰的方法不能被子类重写
3.类方法不能被重写
4.如果是跨包的子类 父类中缺省的方法也不能被子类重写因为权限-子类看不到
只能重写protected和public修饰的类