super 关键字的作用?
参考回答
super
是 Java 中的一个关键字,用于引用父类的成员(包括属性、方法、构造方法),可以在子类中调用父类的构造方法或访问父类的成员。
主要作用有以下几点:
- 调用父类的构造方法。
- 调用父类的成员变量。
- 调用父类的方法。
详细讲解与拓展
1. super
调用父类的构造方法
在子类的构造方法中,super()
用于显式调用父类的构造方法。
- 如果子类构造方法中没有显式调用
super()
或this()
,Java 会默认调用父类的无参构造方法。 - 如果父类没有无参构造方法,则子类必须显式调用父类的带参构造方法。
示例 1:父类有无参构造方法
输出:
Parent's no-arg constructor
Child's constructor
示例 2:父类只有带参构造方法
输出:
Parent's constructor: Alice
Child's constructor
2. super
调用父类的成员变量
- 如果子类和父类有同名的成员变量,可以使用
super
来访问父类的成员变量。 - 如果没有使用
super
,则默认访问的是子类的成员变量。
示例:
输出:
Child name: Child
Parent name: Parent
3. super
调用父类的方法
- 如果子类重写了父类的方法,可以通过
super
调用被重写的父类方法。 - 如果没有使用
super
,则默认调用的是子类的重写方法。
示例:
输出:
Child's display method
Parent's display method
4. super
的限制
- 必须是子类方法或构造方法中使用:
- 不能在静态方法中使用
super
,因为静态方法属于类,而super
是针对实例的。错误示例:
- 必须是构造方法的第一行调用:
- 在子类构造方法中调用父类构造方法时,
super()
必须是构造方法的第一行。错误示例:
- 不能用于调用祖父类的成员:
super
只能直接访问父类的成员,不能访问祖父类的成员。
5. 拓展知识
this
与super
的对比
特性 | this |
super |
---|---|---|
作用域 | 当前类 | 父类 |
调用构造方法 | 调用当前类的其他构造方法 | 调用父类的构造方法 |
调用成员变量 | 当前类的成员变量 | 父类的成员变量 |
调用方法 | 当前类的方法 | 父类的方法 |
super
的使用场景- 访问被隐藏的父类成员变量:当子类与父类有同名变量时。
- 调用被重写的父类方法:当子类重写了父类方法时。
- 初始化父类部分:在子类构造方法中调用父类构造方法。
6. 总结
super
是 Java 中用于访问父类成员(属性、方法、构造方法)的关键字。-
主要作用:
- 显式调用父类的构造方法。
- 访问父类的成员变量(尤其是被子类隐藏的变量)。
- 调用父类的方法(尤其是被子类重写的方法)。
- 注意事项:
- 在构造方法中,
super()
必须是第一行。 - 不能在静态方法中使用
super
。
- 在构造方法中,
-
super
是继承体系中处理父类与子类关系的重要工具。