概述

super 方法

概述

  1. 从本质上讲,this 是一个指向本对象的指针, 然而 super 是一个 Java 关键字.super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类.
  2. this()和super()都只能出现在构造方法的第一行,故this()和super()方法不能共存(因为this必然会调用其它的构造函数,其它的构造函数必然也会有 super 语句的存在),当一个类的构造方法第一行中没有this(),也没有super(),系统默认有super()方法.
  3. this() 和 super() 都指的是对象,所以,均不可以在 static 环境中使用.

普通的直接引用

  1. 可以用 super.xxx 来引用父类的成员.
+ 代码示例
Country.java
City.java
public class Country {
    String name;
    void value() {
        name = "China";
    }
}
public class City extends Country {
    String name;
    public void value() {
        name = "Shanghai";
        super.value();      //调用父类的方法
        System.out.println(name);
        System.out.println(super.name);
    }

    public static void main(String[] args) {
        City c = new City();
        c.value();
    }
}
/**Output:
 * Shanghai
 * China
 **/

引用构造函数

+ 代码示例
Person.java
Chinese.java
public class Person {
    public static void prt(String s) {
        System.out.println(s);
    }

    //构造方法(1)
    Person() {
        prt("父类·无参数构造方法: "+"A Person.");
    }

    //构造方法(2)
    Person(String name) {
        prt("父类·含一个参数的构造方法: "+"A person's name is " + name);
    }
}
public class Chinese extends Person {
    Chinese() {
        // 调用父类构造方法(1)
        super();
        prt("子类·调用父类无参数构造方法:"+"A chinese coder.");
    }

    Chinese(String name) {
        // 调用父类具有相同形参的构造方法(2)
        super(name);
        prt("子类·调用父类含一个参数的构造方法:"+"his name is " + name);
    }

    Chinese(String name, int age) {
        // 调用具有相同形参的构造方法(3)
        this(name);
        prt("子类:调用子类具有相同形参的构造方法:his age is " + age);
    }

    public static void main(String[] args) {
        Chinese cn = new Chinese();
        cn = new Chinese("CodeRay");
        cn = new Chinese("CodeRay", 18);
    }
}

/**Output
 * 父类·无参数构造方法: A Person.
 * 子类·调用父类无参数构造方法:A chinese coder.
 * 父类·含一个参数的构造方法: A person's name is CodeRay
 * 子类·调用父类含一个参数的构造方法:his name is CodeRay
 * 父类·含一个参数的构造方法: A person's name is CodeRay
 * 子类·调用父类含一个参数的构造方法:his name is CodeRay
 * 子类:调用子类具有相同形参的构造方法:his age is 18
 **/

在线测试

+ 在线测试