Java多态性详解与示例
需积分: 3 59 浏览量
更新于2024-09-19
收藏 14KB TXT 举报
"JAVA学习经典笔记-----1"
在Java编程语言中,类的继承是面向对象编程的一个核心概念。Java支持单继承,即一个类只能直接继承一个父类,但可以通过接口实现多继承的效果。这种设计使得Java的继承关系更加清晰,避免了C++等语言中可能出现的菱形继承问题,从而降低了复杂性和潜在的不一致性。
在Java中,子类继承父类,通常用`extends`关键字来表示。例如,如果我们有一个`Animal`类,我们可以创建一个`Cat`类来继承它,代码如下:
```java
class Animal {
// 父类方法和属性
}
class Cat extends Animal {
// 子类方法和属性
}
```
这里,`Cat`类继承了`Animal`类的所有非私有(public或protected)成员,包括方法和变量。这种继承关系体现了IS-A的关系,即`Cat`是一个`Animal`。
Java中的多态性(Polymorphism)是通过方法重写(Override)和方法重载(Overload)实现的。方法重写是指子类可以重新定义父类中已有的虚方法(方法前有`@Override`注解或父类方法声明为`abstract`或`virtual`),以提供更适合子类的行为。而方法重载则是指在同一个类中,可以有多个同名但参数列表不同的方法。
以下是一个关于多态性的例子:
```java
class Father {
public void func1() {
func2();
}
// 该处的func2()没有实现,仅用于展示
public void func2() {
System.out.println("AAA");
}
}
class Child extends Father {
// 重写了父类的func1()方法
public void func1(int i) {
System.out.println("BBB");
}
// 重写了父类的func2()方法
public void func2() {
System.out.println("CCC");
}
}
public class PolymorphismTest {
public static void main(String[] args) {
Father child = new Child(); // 父类引用指向子类实例
child.func1(); // 调用的是子类重写后的func1(),输出:BBB
}
}
```
在这个例子中,`PolymorphismTest`类的`main`方法中,我们创建了一个`Father`类型的引用`child`,并让它指向`Child`类的实例。当调用`func1()`时,由于`Child`类重写了`func1()`,因此实际执行的是`Child`类的方法,输出`BBB`。同样,如果直接调用`func2()`,虽然父类`Father`中没有实现`func2()`,但因为子类`Child`重写了它,所以会输出`CCC`。这就是多态性的表现,即同样的方法调用在不同对象上会产生不同的行为。
总结来说,Java的继承机制和多态性特性使得代码复用变得简单,同时提供了更灵活的设计方式。通过子类继承父类,我们可以扩展功能,而多态性则允许我们编写更通用的代码,提高程序的可维护性和可扩展性。在实际开发中,这些概念是构建大型复杂系统的基础,理解和熟练运用它们是每个Java开发者必备的技能。
2011-07-16 上传
2024-04-16 上传
2024-04-16 上传
2008-10-07 上传
2021-11-25 上传
2009-06-06 上传
2021-05-19 上传
2014-08-16 上传
desk11
- 粉丝: 10
- 资源: 30
最新资源
- NIST REFPROP问题反馈与解决方案存储库
- 掌握LeetCode习题的系统开源答案
- ctop:实现汉字按首字母拼音分类排序的PHP工具
- 微信小程序课程学习——投资融资类产品说明
- Matlab犯罪模拟器开发:探索《当蛮力失败》犯罪惩罚模型
- Java网上招聘系统实战项目源码及部署教程
- OneSky APIPHP5库:PHP5.1及以上版本的API集成
- 实时监控MySQL导入进度的bash脚本技巧
- 使用MATLAB开发交流电压脉冲生成控制系统
- ESP32安全OTA更新:原生API与WebSocket加密传输
- Sonic-Sharp: 基于《刺猬索尼克》的开源C#游戏引擎
- Java文章发布系统源码及部署教程
- CQUPT Python课程代码资源完整分享
- 易语言实现获取目录尺寸的Scripting.FileSystemObject对象方法
- Excel宾果卡生成器:自定义和打印多张卡片
- 使用HALCON实现图像二维码自动读取与解码