Java中super用法详解:构造器调用与this区别
101 浏览量
更新于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 上传
2020-08-31 上传
点击了解资源详情
weixin_38660813
- 粉丝: 5
- 资源: 982
最新资源
- A72BDB68-F5FA-4D0F-906E-EACAA6A1EFA5.rar
- 基于PHP的整站系统Joomla简体中文版源码.zip
- 降价
- HttpClientRequestApp:一个简单的WPF和C#应用程序,可从API获取并显示数据
- PhpWebmin-开源
- strongkids-app:坚强的孩子merupakan aplikasi mengukur gizi anak seperti kurang gizi,sedang gizi,baik gizi
- 旅游小程序有sql脚本-php
- gradfun:gradfun('fun',x) 计算函数 'fun' 在给定点 x 的梯度。 此函数使用复数微分。-matlab开发
- Android手势类库
- next-boilerplate:菜板PadrãoparaaplicaçõesNextJS,incluindo皮棉,git hooks
- lsdpack:独立的LSDj记录器和播放器
- 基于PHP的整站CMS系统清爽模板源码.zip
- Searchgooglesites.com Extention-crx插件
- SloMoVideo:设置 240 FPS 视频并抓取像素数据
- jquery-calendrical:jQuery插件,提供受Google Calender启发的弹出日期和时间选择器
- RepoSweeper:从GitHub批量删除存储库