Java中的super关键字用法解析
版权申诉
5 浏览量
更新于2024-08-28
收藏 46KB PDF 举报
"Java编程中,`super`关键字主要用于访问父类的成员,包括构造函数、成员变量和方法。本文将详细介绍`super`的三种主要用法:调用父类构造器、访问父类的被隐藏成员以及调用父类的被覆盖方法。"
在Java编程中,`super`关键字是一个非常重要的概念,它允许子类对象引用其父类的成员。以下是`super`关键字的三种主要用法:
1. **调用父类构造器**:
当子类继承自父类时,子类的构造函数可以使用`super`关键字来调用父类的构造函数,确保父类的初始化工作得以执行。在子类的构造函数中,`super`必须作为第一条执行的语句,因为它用于设置父类的状态。例如:
```java
class Base {
Base() {
System.out.println("Base");
}
}
public class Checket extends Base {
Checket() {
super(); // 调用父类的构造方法,放在首位
System.out.println("Checket");
}
}
```
如果在子类构造函数中`super`不是第一条语句,编译器会报错,因为其他语句可能会改变子类的状态,然后父类的构造器无法正确地初始化这些状态。
2. **访问父类的被隐藏成员**:
当子类中存在与父类同名的成员变量或方法时,子类的成员会覆盖父类的成员,但通过`super`关键字,我们可以明确地访问父类的这些被隐藏的成员。例如:
```java
class Country {
String name;
void value() {
name = "China";
}
}
class City extends Country {
String name;
void value() {
name = "Hefei";
super.value(); // 调用父类的方法
System.out.println(name);
System.out.println(super.name); // 访问父类的成员变量
}
}
```
在上面的例子中,子类`City`有一个与父类`Country`同名的`name`变量和`value`方法。通过`super.value()`,子类可以调用父类的`value`方法,而`super.name`则用于访问父类的`name`变量。
3. **调用父类的被覆盖方法**:
如果子类重写了父类的方法,但在某些情况下需要调用父类的原版实现,可以使用`super`关键字。例如:
```java
class Parent {
public void display() {
System.out.println("Parent's display");
}
}
class Child extends Parent {
@Override
public void display() {
super.display(); // 调用父类的display方法
System.out.println("Child's display");
}
}
```
在这个例子中,`Child`类重写了`Parent`类的`display`方法,但通过`super.display()`,子类可以先调用父类的`display`方法,然后再执行自己的实现。
总结来说,`super`关键字在Java中起着至关重要的作用,它使得子类能够灵活地与父类交互,无论是调用父类的构造器,访问被隐藏的成员,还是调用被覆盖的方法。正确使用`super`可以帮助我们更好地理解和控制继承关系中的行为。
2021-07-02 上传
2022-11-22 上传
2021-10-11 上传
2021-10-04 上传
2023-11-19 上传
2021-10-11 上传
2023-08-25 上传
2021-10-07 上传
2021-09-30 上传
dtd13961139571
- 粉丝: 1
- 资源: 6万+
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录