super

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、如果子类构造方法中既未显示调用父类构造方法,而父类中又没有无参的构造方法,则编译出错。

五、子类对象的实例化过程

super

思考题

1、因为super和this的作用是一样,如果两个同事写在构造函数中的话,在调用了super之后还回去调用this,所以这样就会调用两次。
2、因为在子类调用父类的构造函数的时候,只有在引用了父类的构造函数之后才能进行使用。