定义
Java支持单继承和多层继承,但不支持多继承
# 子类构造器及super用法
解释:子类构造器,注意是子类的构造器,不是子类的方法的第一行默认都会有super()去调用无参构造器,只不过可以省略没写而已。当然也可以自己写super(参数)必须放第一行,去调用有参数构造器。
*见下图,若父类没有无参构造器,则子类构造器(不是子类方法)必须自己写super(参数列表)去调用父类构造器,而且必须放一行。
总结:子类构造器第一行必须写super(参数列表),若没有参数列表,则super可以省略。
应用场景如下
补充知识:任意类的构造器中,可以通过this(参数列表)去调用该类的其他构造器的
若子类构造器写了this(参数类别)必须,那么this(参数列表)放构造器的第一行
this()和super()只能存在一个,而且必须放第一行
分析以下代码:
package Pack2;public class Test {public static void main(String[] args) {Student zhangsan = new Student("zhangsan");System.out.println(zhangsan.getName());System.out.println(zhangsan.getAge());}public void fun() {System.out.println("fun");}}class Student extends People{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Student() {super();System.out.println("无参");this.age = 1;}public Student(String name) {this(); //这里写了this()那么默认的super()就没有了//也就是this()和super()只能存在一个this.name = name;}}class People {People() {System.out.println("父类构造器");}}
下图为执行流程
运行结果如下:
分析如下:
因为public String(String name)中存在this了 那么不会去调super()了,去到this()指向的构造器,若该构造器没有this去指向另一个构造器了,那么super()就执行了,也就是说super(参数列表)最多执行一次
继承好处
示例代码
1.
注释部分代表报错的代码