TypeScript:super关键字

概述

super关键字表示的是 父类,在子类中,想调用父类的方法或属性,可以用super关键字

访问父类的成员变量

super.成员变量 ‐‐ 父类的成员变量

例子

class Fu {
    // Fu中的成员变量。
    int num = 5;
}
class Zi extends Fu {
    // Zi中的成员变量
    int num = 6;
    public void show() {
        // 访问父类中的num
    System.out.println("Fu num=" + super.num);
    // 访问子类中的num 
    System.out.println("Zi num=" + num);
  }
}

class ExtendsDemo03 {
    public static void main(String[] args) {
    // 创建子类对象
        Zi z = new Zi();
    // 调用子类中的show方法
        z.show();
    }
}

执行结果:

Fu num = 5
Zi num = 6

注意:
Fu 类中的成员变量是 非私有的,子类中可以直接访问。若Fu 类中的成员变量私有了,子类是不能 直接访问的。

访问权限参见:https://www.malaoshi.top/show_1EF4rV1tPz4T.html

通常编码时,我们遵循封装的原则,使用private修饰成员变量,在父类中提供公共的getXxx方法和setXxx方法。

访问父类的方法

super.成员方法名() ‐‐ 父类的成员方法

例子

class Animal {
    public void eat() {
    System.out.println("animal : eat");
    }
}
class Cat extends Animal { 
    public void eat() {
        System.out.println("cat : eat"); 
    }
    public void eatTest() {
        this.eat(); // this 调用本类的方法
        super.eat(); // super 调用父类的方法
    } 
}
public class ExtendsDemo08 {
    public static void main(String[] args) {
        Animal a = new Animal(); 
        a.eat();
        Cat c = new Cat(); 
        c.eatTest();
 }
}

执行结果:

animal : eat 
cat : eat
animal : eat

访问构造方法

 super(...) ‐‐ 父类的构造方法

子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。 super() 必须在 构造方法的第一行
由于this()也必须在 构造方法的第一行,所以这两个代码 不能同时出现

注意事项:

  1. super 可以调用父类方法,由于权限控制,只有父类允许子类调用的才可以。
    参见:https://www.malaoshi.top/show_1EF4rV1tPz4T.html
  2. super(),调用父类的构造方法,因为子类在创建对象时,一定也创建了父类,所有在写子类构造方法时要调用父类的构造方法。当父类没有声明构造方法,或者存在无参的构造方法时,super()可以不写,这样默认会调用无参的构造方法。
    如果父类没有无参构造方法,就需要手动指定调用父类的那个构造方法。
  3. Java中所有的类都是Object类的子类,但是基础Object可以不写,因为不写extends,jdk编译时会默认添加基础Object,如果写了,就不会添加。Object是Java中所有类的超类(父级类,可以能是父类,可能是爷爷类)

原文出处:/show_1GW20b55Jv6f.html