Java中super用法详解:构造器调用与this区别
187 浏览量
更新于2024-08-31
收藏 61KB PDF 举报
Java中`super`关键字在面向对象编程中起着至关重要的作用,尤其是在继承关系中。本文将详细介绍`super`的几种常见用法,并与`this`进行对比,帮助理解这两个关键字在构造函数、成员变量和方法调用中的区别。
1. **构造函数中的`super`**:
在子类的构造函数中,调用父类构造函数(`super()`)必须放在首位。这是因为在执行子类构造函数时,首先会调用父类的构造函数,初始化父类的成员变量。如`Checket`类所示:
```java
class Base {
Base() {
System.out.println("Base");
}
}
public class Checket extends Base {
// 必须放在首位
Checket() {
super(); // 调用父类构造方法
System.out.println("Checket");
}
}
```
如果`super`被放在其他语句之后,这部分语句将覆盖父类的构造行为,导致父类构造方法的执行被重新定义。
2. **处理同名成员变量和方法**:
Java中存在方法和字段的重载问题,子类可以定义与父类同名的成员。这时,子类的同名变量或方法会遮盖父类的。若需要访问父类的同名成员,需要通过`super`关键字,如`Country`和`City`类:
```java
class Country {
String name;
void value() {
name = "China";
}
}
class City extends Country {
String name;
void value() {
name = "Hefei";
// 显示父类的name值
System.out.println(name); // 子类的name
System.out.println(super.name); // 父类的name
}
}
```
不调用`super.value()`时,`super.name`会返回父类`Country`中`name`的默认值(`null`),表明了`this`和`super`在访问属性上的优先级。
总结来说,`super`在Java中主要用于:
- **构造函数中**:确保正确地初始化父类的构造过程,即使在子类中有自定义逻辑。
- **访问父类成员**:当子类有同名成员时,通过`super`来明确调用父类的特定方法或访问其成员变量,避免命名冲突。
- **方法重写**:避免无意间覆盖父类的行为,确保代码的继承性和一致性。
理解`super`与`this`的区别是编程实践中的关键,`this`用于引用当前对象的实例,而`super`则代表父类的实例。两者在不同的上下文中发挥着不同的作用。
2020-08-26 上传
2020-08-25 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2018-06-20 上传
2020-08-27 上传
2021-01-20 上传
点击了解资源详情
weixin_38660813
- 粉丝: 5
- 资源: 982
最新资源
- SSM动力电池数据管理系统源码及数据库详解
- R语言桑基图绘制与SCI图输入文件代码分析
- Linux下Sakagari Hurricane翻译工作:cpktools的使用教程
- prettybench: 让 Go 基准测试结果更易读
- Python官方文档查询库,提升开发效率与时间节约
- 基于Django的Python就业系统毕设源码
- 高并发下的SpringBoot与Nginx+Redis会话共享解决方案
- 构建问答游戏:Node.js与Express.js实战教程
- MATLAB在旅行商问题中的应用与优化方法研究
- OMAPL138 DSP平台UPP接口编程实践
- 杰克逊维尔非营利地基工程的VMS项目介绍
- 宠物猫企业网站模板PHP源码下载
- 52简易计算器源码解析与下载指南
- 探索Node.js v6.2.1 - 事件驱动的高性能Web服务器环境
- 找回WinSCP密码的神器:winscppasswd工具介绍
- xctools:解析Xcode命令行工具输出的Ruby库