继承
什么是继承:
-
继承是面向对象的第二个特征,提出类可以划分为父类和子类,凡是父类具备的属性或行为,子类无需再次书写,
-
而是自动具备
为什么有继承:
-
继承的出现既满足复用与分离的原则,又满足了设计上的开闭原则,在面向对象分析设计时,可以把共有的属性和行为
-
一次性分析得到,定义在父类上,把特有的属性和行为单独设计在子类上,给带来了设计的分析方式
语法上如何实现继承:
-
public class 类名 extends 父类名
-
Java中每个类有且仅有一个父类————称之为“单继承”——结构层次清晰,但丰富的减弱
-
有些编程语言(C++)允许一个类有多个父类————称之为“多继承”——丰富度增加,但层次结构会呈现复杂的网状
-
继承关系可以进行传承,只要在一棵继承树上,超类的属性和行为会自动被派生类继承
什么时候用继承:
-
在问题域中,并不是只要有共同属性和行为就能继承,而是要找到is的关系
内存上如何实现的继承:
-
Java采用“内存叠加”的方式实现了继承
-
Java在产生子类对象的时候,会首先调用父类的构造方法,产生父类的对象部分,
-
然后调用子类的构造方法,在父类部分的下面叠加子类特有部分,构成完整的子类对象
super关键字:
-
1、super()——调用父类的指定构造方法,由于产生子类对象前会先产生父类对象部分,那么就要调用父类方法,
-
如果父类有多个构造,可以用super()调用指定构造,匹配方式是实参和形参的匹配。如果子类构造不写,
-
则默认是无参的super(),调用父类无参构造
-
特点:只能写在构造方法当中,且只能写在第一句,不写也有默认
-
2、super. ——后面跟属性或行为
-
当super. 后面跟方法时,调用的是父类的该方法
-
this. 后面跟方法时,调用的是子类的该方法,若子类没有重写,this. 和 super. 效果一样
-
当super. 后面跟属性时,是调用父类中的属性
-
this. 后面跟属性,既可以调用继承的父类的,也可以调用自己的,
-
(只有父类和子类定义了同一个属性,this. 是子类的属性, super. 是父类的属性)
-
访问子类中的行为和属性,一般用 this 只有一种用super. 即在子类中调用重写前的父类的实现
方法的重写:
-
当子类拥有父类的某个行为,但实现是特有的,应该在父类中先定义,再子类重新实现一次,这就是方法的重写——Override
-
重写后不是子类拥有两个方法,而是仍然只有一个
重写的规范:
-
子类方法的方法名,参数列表(个数,顺序,类型)和返回类型必须和父类中的方法保持一致
-
子类方法的访问修饰符,要么和父类保持一致,要么比父类更大
-
子类方法不能比父类方法抛出更大范围的异常
重写和重载的关系:
-
1、语法上的区分:重载是一个类里有多个同名方法,参数列表不同;重写是在继承关系中,把父类的方法重新实现一次
-
2、场景不同:重载是一个类,重写是多个类,且这些类有继承关系