JavaSE入门:多态概念与使用详解
需积分: 2 192 浏览量
更新于2024-08-05
收藏 2.07MB DOCX 举报
"JavaSE之多态体系的学习笔记,适合初学者,讲解了多态的概念、格式和使用,以及多态中成员变量的使用特点。"
在Java编程中,多态(Polymorphism)是面向对象三大特性之一,它允许我们使用一个父类类型的引用来调用子类的方法和访问子类的成员变量。多态性使得程序具有更好的灵活性和扩展性,能够处理多种不同类型的对象。
**多态的概念**
多态指的是一个接口可以有多种不同的行为。在Java中,这通常体现在父类引用可以操作子类对象,从而使得同一个方法根据不同的对象表现出不同的行为。这样,我们可以在不关心具体类型的情况下进行编程,增强了代码的抽象性和通用性。
**多态的格式与使用**
在Java中,实现多态的典型语法是:
```java
父类名称 对象名 = new 子类名称();
```
或者对于接口:
```java
接口名称 对象名 = new 实现类名称();
```
例如:
```java
public class Fu {
public void method() {
System.out.println("父类方法");
}
public void methodFu() {
System.out.println("父类方法");
}
}
public class Zi extends Fu {
@Override
public void method() {
System.out.println("子类方法");
}
}
public class Zhu {
public static void main(String[] args) {
Fu obj = new Zi(); // 父类引用指向子类对象
obj.method(); // 调用子类方法
obj.methodFu(); // 调用父类方法
}
}
```
在这个例子中,`obj` 是 `Fu` 类型的引用,但实际上指向的是 `Zi` 类的实例,因此 `method()` 方法被子类重写,调用的是子类的版本,而 `methodFu()` 是父类独有的,所以调用的是父类的版本。
**多态中成员变量的使用特点**
在多态场景下访问成员变量有以下两个特点:
1. **直接访问成员变量**:通过对象名直接访问成员变量时,Java会首先查找当前对象实际所属的类(即子类),如果有对应的变量,则使用子类的变量值;如果没有,再向上查找父类的变量。
```java
public class Fu {
int num = 10;
public void showNum() {
System.out.println(num);
}
}
public class Zi extends Fu {
int num = 20; // 覆盖父类的num
int age = 16;
@Override
public void showNum() {
System.out.println(num); // 优先使用子类的num
}
}
public class Zgu {
public static void main(String[] args) {
Fu obj = new Zi(); // 父类引用指向子类对象
System.out.println(obj.num); // 访问到子类的num:10
obj.showNum(); // 优先使用子类的showNum方法,输出子类的num:20
}
}
```
2. **间接访问成员变量**:通过成员方法访问成员变量时,Java会查看该方法所在的类,如果该方法中有对成员变量的访问,那么会优先使用方法所在类的成员变量,如果没有则向上查找。
例如,如果在子类中没有覆盖 `showNum()` 方法,那么调用 `showNum()` 会使用父类的版本,此时输出的将是父类的 `num` 值。
总结来说,多态在Java中是一个强大的工具,它允许我们设计出更加灵活和可扩展的代码。理解并熟练掌握多态的概念和用法,对于提升Java编程能力至关重要。对于初学者来说,多练习、多思考是掌握这一概念的关键。希望这些笔记能帮助你更好地理解JavaSE中的多态体系。
2019-06-15 上传
2010-04-20 上传
2017-05-08 上传
276 浏览量
2018-09-04 上传
2012-04-25 上传
2018-07-12 上传
2018-07-02 上传
2018-01-26 上传
Java学术趴
- 粉丝: 10
- 资源: 15
最新资源
- 开源通讯录备份系统项目,易于复刻与扩展
- 探索NX二次开发:UF_DRF_ask_id_symbol_geometry函数详解
- Vuex使用教程:详细资料包解析与实践
- 汉印A300蓝牙打印机安卓App开发教程与资源
- kkFileView 4.4.0-beta版:Windows下的解压缩文件预览器
- ChatGPT对战Bard:一场AI的深度测评与比较
- 稳定版MySQL连接Java的驱动包MySQL Connector/J 5.1.38发布
- Zabbix监控系统离线安装包下载指南
- JavaScript Promise代码解析与应用
- 基于JAVA和SQL的离散数学题库管理系统开发与应用
- 竞赛项目申报系统:SpringBoot与Vue.js结合毕业设计
- JAVA+SQL打造离散数学题库管理系统:源代码与文档全览
- C#代码实现装箱与转换的详细解析
- 利用ChatGPT深入了解行业的快速方法论
- C语言链表操作实战解析与代码示例
- 大学生选修选课系统设计与实现:源码及数据库架构