Java super 关键字

Java super 关键字详解

super 代表父类(超类)对象引用,仅存在子类中,用来访问父类的成员,和代表当前对象的 this 对应。

一、super 三种核心用法

1. super.成员变量:访问父类同名成员变量

子类和父类属性重名时,默认优先访问子类,用 super.属性 指定父类。

class Parent {
    String name = "父类";
}

class Son extends Parent {
    String name = "子类";

    void show() {
        System.out.println(name);       // 子类(自身)
        System.out.println(super.name); // 父类(super访问父类)
    }
}

2. super.方法():调用父类重写前的方法

子类重写父类方法后,直接调用是子类自身实现;super.方法() 执行父类原始逻辑。

class Parent {
    void say() {
        System.out.println("父类说话");
    }
}

class Son extends Parent {
    @Override
    void say() {
        super.say(); // 先调用父类方法
        System.out.println("子类说话");
    }
}

3. super():调用父类构造方法

规则:

  1. super() 必须写在子类构造方法第一行
  2. 不写 super(),编译器默认隐式添加无参 super()
  3. 父类只有有参构造,子类必须手动 super(参数),否则编译报错;
  4. super()this() 不能同时存在构造器,都要求放第一行。
class Parent {
    String name;
    // 有参构造
    Parent(String name) {
        this.name = name;
    }
}

class Son extends Parent {
    // 子类构造必须调用父类有参构造
    Son() {
        super("父类姓名"); // 必须第一行
    }
}

二、super 与 this 对比

特性 this super
含义 当前类对象引用 父类对象引用
访问变量 本类成员变量 父类成员变量
调用方法 本类方法 父类方法
构造调用 this() 调用本类其他构造 super() 调用父类构造
使用位置 普通方法、构造方法 普通方法、构造方法
静态方法 不能使用 不能使用

三、关键注意事项

  1. 静态方法不能用 super / this
    static 属于类,没有实例对象,super/this 依赖对象,编译报错。
  2. 构造器中 super() 隐含调用顶层 Object
    所有类直接/间接继承 Object,无参构造最终都会走到 super() 调用 Object 构造。
  3. 多层继承时,super 只直接访问直接父类,不能隔代访问爷爷类(需要爷爷类提供方法中转)。
  4. super 不能在静态代码块、静态方法中出现。

四、完整综合示例

// 父类
class Animal {
    String type = "动物";

    public Animal() {
        System.out.println("父类无参构造");
    }

    public void run() {
        System.out.println("动物奔跑");
    }
}

// 子类
class Dog extends Animal {
    String type = "小狗";

    public Dog() {
        super(); // 调用父类构造,可省略
    }

    @Override
    public void run() {
        System.out.println(this.type);    // 子类变量
        System.out.println(super.type);    // 父类变量
        super.run();                       // 父类方法
        System.out.println("小狗四条腿跑");
    }
}

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.run();
    }
}

输出:

父类无参构造
小狗
动物
动物奔跑
小狗四条腿跑

五、常见面试考点

  1. 子类构造方法默认第一行隐式 super()
  2. 父类无无参构造,子类必须显式 super(实参)
  3. super()this() 互斥,不能共存;
  4. super 只能在实例方法/构造器,static 中禁用;
  5. 方法重写后通过 super.方法() 复用父类逻辑。
posted @ 2026-07-02 10:09  kk9986  阅读(3)  评论(0)    收藏  举报