1 为什么需要super
- 子类调用父类以后,对父类方法进行了重写。为了能够继续调用对父类中被重写方法
- 子类继承父类以后,发现在子类和父类中定义了同名属性,为了在子类中区分两个同名属性
2 super 父类的
3 super可以调用属性,方法,构造器
3.1 super调用属性,方法
- 子类继承父类以后,我们可以在子类的方法或者构造器中调用父类中声明的属性或者方法(满足封装性的前提下)。使用“super.”的声明,表示调用父类的属性或者方法。
- 一般情况下,我们可以考虑省略“super.”结构。但是,如果出现了子类重写了父类的方法或者子父类中出现了同名属性时,则必须使用“super.”的声明,显式调用父类被重写的方法或者父类中声明的同名属性。
3.2 super调用构造器
- 子类继承父类时,不会继承父类的构造器。只能通过“super(形参列表)”的方式调用父类指定的构造器
- “super(形参列表)”只能在首行
- 构造器的首行可以使用“this(形参列表)”,调用本类中重载的构造器。结合第二条结论,在构造器的首行“this(形参列表)”和“super(形参列表)”只能二选一
- 如果在子类构造器首行既没有显示调用“this(形参列表)”也没有显式调用“super(形参列表)”,则子类构造器默认调用“super()”,即调用父类中空参构造器
- 由结论3和结论4可以推出,子类中任何一个构造器,要么调用本类中重载的构造器,要么调用父类构造器
- 由结论5可以推出,一个类生命中有n个构造器,最多有n-1个构造器使用“this(形参列表)”,则剩下那个一定使用“super(形参列表)”
我们在通过子类构造器创建对象时,一定在调用子类构造器过程中,直接或者间接调用到父类构造器 。也正因为调用过父类的构造器,我们才会将父类中生命的属性或者方法加载到内存中供子类对象使用