构造方法继承之super关键字
- 前言
- 一、关键字super
- 二、构造方法的继承
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、关键字super使用关键字super可以引用被子类隐藏的父类的成员变量或方法,super引用的语句格式:
super.成员变量名;
super.方法名(实参列表);
1. 在子类的构造方法内部引用父类的构造方法
SuperDemo1.java文件
package first;
public class SuperDemo1 {
public SuperDemo1() {
//父类构造方法1
}
public SuperDemo1(int a) {
//父类构造方法2
}
}
SubDemo1.java文件
package first;
public class SubDemo1 extends SuperDemo1 {
public SubDemo1() {
super(); //可省略 调用父类构造方法1
}
public SubDemo1(int a) {
super(a); // 必须放在第一句 调用父类构造方法2
}
public SubDemo1(String s) {
super(); // 可省略 调用父类构造方法1
}
}
super调用构造方法的代码只能出现在子类构造方法中的第一行可执行代码。这样super调用构造方法的代码在子类的构造方法内部最多出现一句,且不能和this调用构造方法的代码一起使用,当调用父类构造方法时,super()的代码可以省略。
2. 在子类中调用父类中的成员方法
SuperDemo2.java文件
package first;
public class SuperDemo2 {
public void test() {
}
public void print(int a) {
System.out.println("SuperDemo2:"+a);
}
}
SubDemo2.java文件
package first;
public class SubDemo2 extends SuperDemo2{
public void print(int a) {
super.print(a);//调用父类方法
System.out.println("Sub Demo2");
}
public void t() {
super.test();
super.print(0); //不可以省略 因为子类方法重写了父类方法print();
}
}
3. 在子类中调用父类的成员变量
在子类中如果引用父类的成员变量,也可以使用super.成员变量 来饮用,只是一般成员变量的覆盖是没有意义的。这个时候都可以直接使用成员变量名进行引用。
构造方法可以重载,但不能被重写,当子类继承父类构造方法 必须遵守以下原则
- 子类无条件继承父类的无参的构造方法,并在创建新子类对象时自动执行。
- 子类不能继承父类的带参数的构造方法,而只能通过super关键字调用父类的某个构造方法
- 若子类的构造方法中没有super语句 创建对象时系统先自动调用继承自父类的无参构造方法,再执行自己的构造函数
- 子类的构造方法定义中,如要调用父类的含参数的构造方法,需用super关键字。且该调用语句必须是子类的构造方法的第一条可执行语句。
- 好的编程习惯是子类的构造方法调用父类某个构造方法,减少代码编写量。



