首页 > 编程语言 >Java SE核心技术——11多态

Java SE核心技术——11多态

时间:2024-08-07 14:05:31浏览次数:15  
标签:11 Java 函数 对象 子类 代码 多态 父类

多态的概念

  1. 多态是指一个变量在不同的环境中有不同的体现,是面向对象特征之一
  2. 多态就是同一个接口,使用不同的实例而执行不同的操作
  3. 多态是对象多种表现形式的体现:同一时间发生在不同对象上会产生不同的结果。

多态的优点

  • 消除类型之间的耦合关系
  • 可替换性
    可扩充性
  • 接口性
  • 灵活性
  • 简化性

多态存在的三个必要条件

  • \1. 必须在继承体系下
    \2. 子类必须要对父类中方法进行重写
    \3. 通过父类的引用调用重写的方法)

实现多态的两种方式

  • 重载
  • 重写
    多态是面向对象编程(OOP)的一个核心概念,它允许不同类的对象对同一消息做出响应,但具体的行为会根据对象的实际类型而有所不同。以下是使用多态的一些主要原因:
  1. 提高代码的可读性和可维护性: 多态使得代码更加简洁,易于理解和维护。开发者可以编写更高层次的抽象代码,而不必担心底层的具体实现细节。
  2. 增强代码的灵活性和扩展性: 使用多态,可以在不修改现有代码的情况下引入新的对象类型。新类型的对象可以被现有代码无缝地处理,只要它们遵循相同的接口或继承自相同的类。
  3. 降低类之间的耦合度: 多态允许类之间通过接口或抽象类进行交互,而不是直接依赖于具体的实现。这减少了类之间的依赖关系,使得系统更加模块化。
  4. 实现运行时绑定: 多态支持运行时绑定,即在程序运行时确定调用哪个方法的实现。这提供了更大的灵活性,因为可以在运行时根据对象的实际类型选择不同的行为。
  5. 支持设计模式: 许多设计模式,如工厂模式、策略模式、命令模式等,都依赖于多态性来实现。这些模式可以解决常见的设计问题,提高代码的重用性和可扩展性。
  6. 促进代码重用: 多态允许开发者编写通用的代码,这些代码可以与多种类型的对象一起工作,而不需要为每种类型编写特定的代码。
  7. 实现替换和扩展: 使用多态,可以轻松替换或扩展系统中的对象,而不影响使用这些对象的代码。这使得系统更加灵活和可扩展。
  8. 简化复杂性: 多态允许开发者通过定义简单的接口来操作复杂的对象,从而简化了系统的复杂性。
  9. 提高代码的可测试性: 多态使得模拟(mocking)和存根(stubbing)实现类更容易,从而简化了单元测试和集成测试。
  10. 支持类型安全: 多态提供了一种类型安全的方式来使用对象。即使对象的具体类型未知,只要它们实现了相同的接口或继承自同一个类,就可以通过基类或接口类型安全地调用它们的方法。
  11. 实现开闭原则: 多态支持开闭原则,即软件实体应对扩展开放,对修改关闭。这意味着你可以在不修改现有代码的情况下扩展系统的功能。

多态是面向对象设计的一个强大工具,它有助于创建更加灵活、可维护和可扩展的软件系统。通过使用多态,开发者可以编写更高层次的抽象代码,同时保持对底层实现细节的解耦。

public class OverloadExample {
public void display(int a) {
System.out.println("Argument: " + a);
}

public void display(String a) {
    System.out.println("Argument: " + a);
}

public static void main(String[] args) {
    OverloadExample obj = new OverloadExample();
    obj.display(10);     // 输出:Argument: 10
    obj.display("Hello"); // 输出:Argument: Hello
}

}

多态的机制原理主要依赖于以下几个关键概念:

  1. 继承(Inheritance)
    • 多态性通常在有继承关系的类之间实现。子类继承父类的特性和行为。
  2. 方法重写(Method Overriding)
    • 在子类中,可以重写(Override)从父类继承来的方法。这意味着子类提供了自己的实现方式,尽管方法名和参数列表与父类中的方法相同。
  3. 虚函数(Virtual Functions)
    • 在父类中,将方法声明为虚函数允许子类重写该方法。虚函数是运行时多态的基础。
  4. 动态绑定(Dynamic Binding)
    • 也称为晚期绑定,是在程序运行时根据对象的实际类型来确定调用哪个方法的机制。
  5. 虚函数表(Virtual Function Table, VTable)
    • 一些编译器实现多态性时使用虚函数表。每个包含虚函数的类都有一个虚函数表,该表包含了虚函数的地址。
  6. 对象的内存布局
    • 对象的内存布局中通常会包含一个指向其类信息的指针,这个类信息可以包含指向虚函数表的指针。

多态的实现步骤通常如下:

  1. 声明虚函数
    • 在父类中,声明一个或多个方法为虚函数。
  2. 子类重写
    • 子类继承父类,并重写父类中的虚函数。
  3. 创建对象
    • 创建父类类型的引用或指针,指向子类的对象。
  4. 调用方法
    • 通过父类引用或指针调用方法。此时,编译器生成的代码会根据对象的实际类型在运行时确定调用哪个方法。
  5. 动态绑定
    • 程序运行时,虚拟机制查找对象的虚函数表,找到正确的函数地址,并调用该函数。
  6. 执行方法
    • 执行所选择的方法,这可能是父类的方法,也可能是子类重写的方法。

多态的机制原理使得面向对象编程更加灵活和强大。它允许以统一的方式处理不同类型的对象,同时能够在运行时根据对象的实际类型动态选择正确的行为。这种灵活性是面向对象设计的重要优势之一。

标签:11,Java,函数,对象,子类,代码,多态,父类
From: https://www.cnblogs.com/zxt102220/p/18346938

相关文章

  • 微信电脑版v3.9.11.17 防撤回版 多开版
    版本特色:1、看到对方撤回的消息2、多账号可正常登录修改原理,如下图:使用说明:解压后,双击start_Wechat.exe来运行软件下载地址:Wechat防撤回版v3.9解压密码:helloh下载时可能会有广告,忽略,等下载结束即可部分杀软会因该版本软件未购买签名证书(如下图)而阻止运行,可通过暂时......
  • 第一课jdk17,java技术路线
    用对话形式,阐述中学生都能听懂的java入门篇,不涉及具体技术细节。场景1:-面试官A-求职者BA:什么是java?B:java是一门编程语言,主要用于后台开发、web开发。//说是什么和具体实际应用。A:什么是后台?B:后台的质量决定了服务器处理高并发、网络安全问题等性能。后台类似餐厅的后厨,......
  • Java程序设计:Java IO(2)
    目录1实验名称2实验目的3实验源代码4实验运行结果图5总结1实验名称   JavaIO2实验目的    继续熟练掌握在eclipse中调试代码    掌握Java IO中流的基本概念及使用方法    掌握文件锁、Scanner解析文件的使用方法3实验源代......
  • Java程序设计:Java IO
    目录1实验名称2实验目的3实验源代码4实验运行结果图5总结1实验名称   JavaIO2实验目的    继续熟练掌握在IDEA中调试代码    掌握File类的基本使用    掌握Java IO中流的基本概念及使用方法    掌握文件IO流、缓冲流......
  • Java计算机毕业设计基于Android的公交线路状态查询系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速,公共交通系统成为了城市居民日常出行不可或缺的一部分。然而,传统的公交线路查询方式往往依赖于纸质地图、公交站牌或电话查询,这......
  • Java计算机毕业设计山西工程技术学院学生请假管理系统的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高校规模的不断扩大和学生管理需求的日益复杂化,传统的人工请假管理方式已难以满足高效、准确、便捷的管理要求。山西工程技术学院作为一所培养工......
  • Java计算机毕业设计个人博客微信小程序演示录像220239(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和智能手机的普及,个人博客作为一种重要的网络表达和信息分享方式,逐渐从传统的PC端向移动端延伸。微信小程序作为一种轻量级......
  • Java计算机毕业设计基于小程序急救知识教学平台PC端(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在紧急情况下,迅速而准确的急救措施往往能够挽救生命,减少伤残。然而,公众急救知识的普及率普遍较低,且传统的急救培训方式受限于时间、地点和资源,难以覆......
  • Java计算机毕业设计矿区员工信息管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着矿区规模的不断扩大和现代化管理的深入,矿区员工的信息管理变得日益复杂且重要。传统的纸质档案管理方式已难以满足高效、准确、实时地处理员工信......
  • Java计算机毕业设计基于协同过滤算法的商品推荐系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息爆炸的时代,电商平台上的商品数量呈指数级增长,用户在面对海量商品时往往感到无所适从,难以快速找到符合自身需求和喜好的商品。传统的搜索方式虽......