因为子类不可以继承父类的构造方法,所以,想要调用父类的构造方法的话,那么就可以使用得到super关键字下面的话就来对这个方面做一下详细的讲解。
super关键字能够用来访问父类的构造方法、普通方法和属性。
super关键字功能:
super调用父类构造方法
super关键字可以在子类的构造方法中显式地调用父类的构造方法。
下面是基本格式:(parameter-list 指定了父类构造方法中的所有参数,super( )必须是在子类构造方法的方法体的第一行)
super(parameter-list);
示例:
声明父类Person和子类Student,在Person类中定义一个带有参数的构造方法。
public class Person { public Person(String name) {} } public class Student extends Person {}
会发现Student类出现编译错误,提示必须显式定义构造方法。(错误信息):
Implicit super constructor Person() is undefined for default constructor. Must define an explicit constructor
JVM默认给Student类加了一个无参构造方法,而在这个方法中默认调用了super(),但是Person类中并不存在该构造方法,所以会编译错误。
假如,一个类中没有写任何的构造方法,JVM会生成一个默认的无参构造方法。
在继承关系中,因为,在子类的构造方法中,第一条语句默认为调用父类的无参构造方法(即默认为 super(),一般这行代码省略了)。
所以当在父类中定义了有参构造方法,但是没有定义无参构造方法时,编译器会强制要求我们定义一个相同参数类型的构造方法。
示例:
声明父类Person,类中定义两个构造方法:
public class Person { public Person(String name, int age) {} public Person(String name, int age, String sex) {} }
子类Student继承了Person类,使用super语句来定义Student类的构造方法:
public class Student extends Person { public Student(String name, int age, String birth) { super(name, age); // 调用父类中含有2个参数的构造方法 } public Student(String name, int age, String sex, String birth) { super(name, age, sex); // 调用父类中含有3个参数的构造方法 } }
Student类构造方法代码可以看出,super可以用来直接调用父类中的构造方法,使编写代码也更加简洁方便。
编译器会自动在子类构造方法的第一句加上super();来调用父类的无参构造方法,必须写在子类构造方法的第一句,也可以省略不写。
通过super来调用父类其它构造方法时,只需要把相应的参数传过去。
更多java基础知识,请继续通过本站来进行了解和学习吧。
推荐阅读: