TypeScript:super关键字 作者:马育民 • 2025-10-09 10:22 • 阅读:10007 # 概述 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中所有类的超类(父级类,可以能是父类,可能是爷爷类) 原文出处:http://malaoshi.top/show_1GW20b55Jv6f.html