【JAVA学习之路 | 基础篇】super关键字
简介:
【JAVA学习之路 | 基础篇】super关键字
1.需求
- 子类继承父类以后,并且对父类的方法进行的重写,那么在子类中是否可以对父类被重写的方法进行调用?
- 子类继承父类后,发现在子类中定义了和父类中同名的属性,是否可以在子类中区分二者?
2.super可调用的结构
- 属性
- 方法
- 构造器
3.super调用属性和方法
- 子类继承父类后,我们可以在子类的方法或构造器中,调用父类声明的属性和方法(前提满足封装性).使用"super."调用父类的属性和方法.
- 一般情况下,可以考虑省略"super.",但如果子类重写了父类的方法或者子父类出现了同名的属性,就必须使用"super.",显式调用父类被重写的方法或父类中声明的同名属性.
4.super调用构造器
- 子类继承父类时,并不会继承父类的构造器.只能通过"super(参数列表)"调用父类指定的构造器.
- 规定 : "super(参数列表)"必须声明在构造器的首行.
- 可以使用"this(参数列表)"可以调用本类重载构造器,且该只能出现在构造器的首行.故"super(参数列表)"和"this(参数列表)"只能二选一.
- 如果在子类中没有显式调用"this(参数列表)"和"super(参数列表)",那么该构造器会默认调用"super()",即父类的无参构造器.
- 子类的任何一个构造器,要么调用本类的重载构造器,要么调用父类的构造器.
- 如果子类没有显式调用父类构造器或本类构造器,而此时父类恰好又没有空参构造器(当父类中显式声明构造器,系统不再默认添加空参构造器),此时编译出错.
- (重点).我们在通过子类的构造器创建对象时,一定在构造过程中,直接或间接的调用父类构造器,直到调用了Obgect类中的构造器为止.也正因为调用父类的构造器,父类的属性和方法才会被加载到内存中,供子类对象使用.(即祖宗类先被加载到内存中,然后是父类,然后是子类)