Super关键字
当子类对象继承了父类对象之后,子类对象要是想调用父类对象的时候,不可以直接引用(如果直接引用的话就变成了死循环),需要用Super关键字对父类对象进行引用,就相当于在你需要引用本类的属性的时候需要用到this关键字是一样的。
一、在JAVA 类中使用super来引用父类的成分
1、super可用于访问父类中定义的属性
2、super可用于调用父类中定义的成员方法
3、super可用于在子类构造方法中调用父类的构造方法
4、super的追溯不仅限于直接父类
//关键字super举例
public class Person{
private String name;
pribate int age;
public String getInfo(){
return "Name:"+name+"\nage:"+age;
}
}
public class Student extends Person{
private String school = "New Oriental";
public String getSchool(){return school;}
public String getInfo(){
//调用父类的方法
return super.getInfo()+"\nschool"+school;
}
}
二、在子类的构造器中调用父类的构造器
1、可以在父类中通过super(参数列表)的方式来调用父类的构造器。
2、默认情况下子类的构造器调用父类的无参数的构造器。
pubic Student(){
super();
}
3、若父类定义了带参数的构造器,则系统将不再为弗雷提供无参数的构造器。儿子类的构造器中必须调用父类的一个构造器。
3.1、父类显示定义个无参数的构造器。
3.2、在子类的构造器中显示的调用父类带参数的构造器。
4、与this类似,super(参数列表)必须放在构造器的第一行。这就说明this(参数列表)和super(参数列表)不能同时存在。
public Student (String name ,ing age, String school){
super(name,age);
this.school = school;
}
//假如父类的构造器中没有空的构造方法,可以由以下的代码进行调用
public Student(){
//this("",1,"");
super("",1);
System.out.println("");
}
三、构造方法不能被继承
1、子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。
2、在一个JAVA类中可以通过两种方式获得构造方法
2.1使用系统默认的无参数构造方法
2.2显示定义一个或多个构造方法
3、一旦显示定义了构造方法,则系统不再提供默认构造方法
四、调用父类构造方法
1、在子类的构造方法中可使用super(参数列表)语句调用父类的构造方法
2、如果子类的构造方法中没有显示的调用父类构造方法,也没有使用this关键字调用重载的其他构造方法,则系统默认调用父类无参数的构造方法。
3、如果子类构造方法中既未显示调用父类构造方法,而父类中又没有无参的构造方法,则编译出错。
五、子类对象的实例化过程
思考题
1、因为super和this的作用是一样,如果两个同事写在构造函数中的话,在调用了super之后还回去调用this,所以这样就会调用两次。
2、因为在子类调用父类的构造函数的时候,只有在引用了父类的构造函数之后才能进行使用。