Java 中 super 关键字的用法

2025年8月18日 | 阅读 5 分钟

super 关键字是一个引用变量,用于引用直接父类对象。它通常在继承中使用,以访问在子类中被重写或隐藏的父类方法、构造函数或变量。

当子类方法需要显式调用父类功能时,使用 super 关键字至关重要。

super 关键字的特性

  1. 访问父类变量:当子类拥有与父类同名的字段时,会使用它。
  2. 调用父类方法:它允许访问父类的重写方法。
  3. 调用父类构造函数:它用于从子类构造函数调用父类构造函数。
  4. 在构造函数中必须是第一个:在构造函数中调用 super() 时,它必须是第一个语句。
  5. 不能在静态上下文中使用:关键字 super 指的是一个实例,因此不能在静态方法中使用。

super 关键字的优点

使用 Java 中的 super 关键字的优点如下:

  1. 简化构造函数链:super() 调用确保在子类构造函数之前执行父类构造函数,从而在继承层次结构中保持正确的初始化。
  2. 访问重写的方法:它允许子类调用父类中的方法,即使子类已经重写了该方法。这有助于在不完全重写的情况下扩展功能。
  3. 访问隐藏的字段:它提供了对子类可能隐藏具有相同名称的父类字段的访问。
  4. 代码重用:通过调用父类的方法或构造函数,它促进了代码重用并减少了冗余。
  5. 维护层次关系:它保留并利用继承的层次结构,使代码更有条理,更易于管理。

super 关键字的用法

1. 访问父类变量

当子类定义了一个与父类变量同名的变量时,父类变量将被隐藏。super 关键字允许从子类访问此隐藏变量。当父类和子类都具有同名字段并且您需要区分它们时,这很有帮助。

示例

编译并运行

输出

Child num: 200
Parent num using super: 100

2. 调用父类方法

如果在子类中重写了某个方法,则默认情况下父类中的原始方法将无法访问。super 关键字用于从父类调用重写的方法。这允许子类包含或扩展父类方法的功能。

示例

编译并运行

输出

Dog barks
Animal makes a sound

3. 调用父类构造函数

在继承中,当创建子类对象时,必须首先执行父类构造函数。super() 关键字在子类构造函数中使用,以显式调用其直接父类的构造函数。

注意:如果构造函数中没有 super() 或 this(),编译器会自动将 super() 添加到每个类构造函数中。

示例

编译并运行

输出

Vehicle constructor called
Car constructor called

Java super 关键字选择题

1. Java 中 super 关键字的主要目的是什么?

  1. 引用子类对象
  2. 访问类的私有成员
  3. 引用直接父类对象
  4. 调用父类的 main 方法
 

答案:C

解释:super 关键字用于引用 Java 中的直接父类对象,并通常用于访问隐藏的变量、方法或构造函数。


2. 如果子类构造函数中的 super() 不是第一条语句,会发生什么?

  1. 它会编译但会抛出运行时异常
  2. 它会成功编译
  3. 编译错误
  4. 程序将忽略 super() 调用
 

答案:C

解释:如果在构造函数中 super() 不是第一条语句,编译器将抛出错误,因为必须先初始化父类,然后再初始化子类。


3. 以下哪个是 super 不能用于访问的?

  1. 父类构造函数
  2. 父类静态方法
  3. 父类实例变量
  4. 父类中的重写方法
 

答案: B

解释:super 不能用于访问静态方法,因为静态方法属于类而不是实例。super 指的是父类的对象(实例)。


4. 关于在方法重写中使用 super 的以下陈述中,哪项是正确的?

  1. 如果方法被重写,则不能使用 super
  2. super 可用于从父类调用重写的方法
  3. super 只适用于静态方法
  4. super 只在构造函数中使用
 

答案: B

解释:在方法重写中,super.methodName() 可以在子类中使用来调用父类中的重写方法。


5. 考虑以下代码片段。输出是什么?

  1. 50
  2. 100
  3. 0
  4. 编译错误
 

答案:A

解释:super.x 访问类 A(父类)中的 x 变量,其值为 50。


下一个主题Java 包程序