super关键字

使用super可以调用父类的成分:父类的成员变量、父类的方法、父类的构造方法。

注意:使用super关键字和this关键字,均不能用在静态方法中,只能用在普通方法(实例方法)中。

7.1访问属性:

父类

public class FatherClass{
  public int age=18;
}

子类

public class ChildClass extends FatherClass{
  public int age = 10;


  public void test1(){
    System.out.println(this.age);//这里将输出 10
  }
  public void test2(){
    System.out.println(super.age);//这里将输出 18
  }
  public void test3(){
  System.out.println(age);//这里将输出 10;默认情况,如果父类存在age属性,子类也存在age属性,直接访问age将是以 this.age 形势访问。但如果本类不存在age属性,则将以 super.age 的形势访问。
  }

}

7.2 访问方法:

父类

public class FatherClass{
  public void show(){
    System.out.println("Father类方法");
  }
}

子类

public class ChildClass extends FatherClass{
  public void show(){
    System.out.println("Child类方法");
  }

  public void test1(){
    this.show();//这里将输出:Child类方法
  }
  public void test2(){
    super.show();//这里将输出:Father类方法
  }
  public void test3(){
      show();//这里将输出:Child类方法;

  //默认情况,如果父类存在show()方法,子类也存在show()方法,直接访问show()方法将是以 this.show() 形势访问。但如果本类不存在show()方法,则将以 super.show() 的形势访问。
  }

}

7.3 this和super的区别

7.4 继承中的构造方法

​ 由于子类和父类的类名(包括包名)肯定不同,而构造方法的名字必须和类名一致,所以构造方法不能继承。

​ 创建子类对象时,子类会继承父类的一些元素,所以子类会先访问父类的构造方法。

7.4.1 调用父类的构造方法

子类实例化时,必须首先调用父类的构造方法,然后才是子类的构造方法。默认情况调用的为父类的无参构造方法。

public class FatherClass {

    int age;

    public FatherClass() {
        super();
    }

    public FatherClass(int age) {
        this.age = age;
    }
}

调用父类的构造方法:

public class ChildClass extends FatherClass {

    public ChildClass() {
        super();//默认调用无参构造方法
    }

    public ChildClass(int age) {
        super(age);//指定调用父类的具体构造方法
    }

}

注意:

  1. 有时,需要在子类的构造方法中来调用父类的某个特定的构造方法。语法:super(实参,实参,实参……)

  2. super()调用父类构造方法时,必须是子类该构造方法的第一行代码。

  3. 实参可以为空,当实参为空时表示调用的是父类的无参构造方法,此时与省略super()效果相同.

7.4.2 继承关系的初始化顺序是怎样的?

(笔记:但调用是先调用的子类构造器)

results matching ""

    No results matching ""