定义
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.
注释部分代表报错的代码