如何理解和应用Java的多态

简介:
“一石二鸟。”

——《成语》

 

多态在现实世界中比比皆是。从描述人的性格和行为的“多面人”、“多面手”,到具有综合功能的产品“三合一”、“四合一”,都指动态性特征。多态使我们的世界更绚丽多彩。计算机的应用应该是多态的最典型实例。
多态性是面向对象编程三个重要特性之一。 Java 中的多态性是通过综合应用继承、覆盖,以及向上转型实现的。本章首先综合阐述面向对象编程的这些重要特征,引申到代码中的多态概念、多态带来的好处,以及多态能够解决的问题。然后通过实例详细讨论多态技术在编程中的应用。

8.1  概述

不具备多态性的计算机语言不能算是功能强大、动态绑定的语言。 Java 实际上将 C/C++ 语言中的多态编程技术简单化、规范化,以及实用化。使之更容易解决应用软件开发中的问题。例如, Java 取消了 C/C++ 中体现多态技术但没有多大实用价值的操作符重载;摒弃了 C/C++ 中实现多态时,对超类必须定义虚拟成员子程序的要求等等,这些改进无疑使 Java 成为当今最流行语言起到推波助澜的作用。
当然,多态编程不是单一概念和技术的应用。例如,为了实现多态,在继承中对超类提供多态接口的要求,对子类覆盖超类方法或完善多态接口,由此产生多态方法的规定,以及动态调用这些方法涉及的编程技术,要求读者朋友需要花费更多的注意力、时间和练习,以便掌握多态编程技术。
下面让我们回到问题的开始,一步步做起。首先讨论多态能解决什么问题?它的应用给软件开发带来什么好处?

8.1.1  多态问题

讨论以下几个应用软件开发中涉及多态性的问题。
问题 1 :某信用卡公司要给成千上万的客户发账户信息。每个客户是不同对象。如何用最有效的手段编写代码?
回答:使发送客户信息的操作,如 sentMessage() 具有多态性。对不同的对象,即客户,虽然都调用方法 sentMessage() ,但对象不同,其操作内容不同。利用多态、链表或集合,以及循环,可以有效地解决这个问题。
问题 2 :定义键盘新功能。例如,根据不同国家语言输入,货币键“ $ ”在中文输入时自动切换为“¥”;在意大利文输入时为“ ”;在法文输入时为“ ”,并且分别代表各国货币的表示方式。如何在代码中有效地实现这些功能?
回答:应用多态,对货币键进行新的定义。如不同国家代表不同对象,而监控货币键的操作由方法,如 currencyKey() ,执行不同货币符的显示。其他与货币相关的键也如法炮制,举一反三。
问题 3 :回到在上一章节讨论过的计算几何物体表面积和体积的例子。如何在程序中最有效地计算众多不同几何体的表面积 computeArea()
回答:这是解释多态性最经典例子。计算表面积的方法,如 computeArea() ,包括其他类似方法,如 computeVolume() draw() ,等等,都可应用多态来解决。因为这些方法都可以针对不同的几何体,进行运算和操作。即:形态不一、方法相同、内容多样。
读者朋友是否也可以也列举出更多多态方面的问题?

8.1.2  多态好处

        多态给我们带来的好处,可以归纳为如下 5 点:
1.          可替换性( substitutability )。多态对已存在代码具有可替换性。例如,多态对圆 Circle 类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.          可扩充性( extensibility )。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.          接口性( interface-ability )。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。例如,假设超类 Shape 规定了
    两个实现多态的接口方法, computeArea() 以及 computeVolume() 。子类,如 Circle Sphere 为了实现多态,可以完善或者覆盖这两个接口方法。
4.          灵活性( flexibility )。它在应用中体现了灵活多样的操作,提高了使用效率。
5.          简化性( simplicity )。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
        值得注意的是,多态并不能够解决提高执行速度的问题,因为它基于动态装载和地址引用,或称动态绑定。但在 Java 中,除了 final 类和一定条件下的 final 方法外,所有方法都由 JVM 在运行期间进行动态绑定。将在 8.4  小节专门讨论方法绑定问题。(待续)




















本文转自高永强51CTO博客,原文链接: http://blog.51cto.com/yqgao/175659  ,如需转载请自行联系原作者

相关文章
|
1月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
233 3
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
124 8
|
2月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
467 12
|
2月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
400 1
|
3月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
Java 大视界 -- Java 大数据机器学习模型在自然语言生成中的可控性研究与应用(229)
本文深入探讨Java大数据与机器学习在自然语言生成(NLG)中的可控性研究,分析当前生成模型面临的“失控”挑战,如数据噪声、标注偏差及黑盒模型信任问题,提出Java技术在数据清洗、异构框架融合与生态工具链中的关键作用。通过条件注入、强化学习与模型融合等策略,实现文本生成的精准控制,并结合网易新闻与蚂蚁集团的实战案例,展示Java在提升生成效率与合规性方面的卓越能力,为金融、法律等强监管领域提供技术参考。
|
3月前
|
存储 监控 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在企业生产运营监控与决策支持中的应用(228)
本文探讨了基于 Java 的大数据可视化技术在企业生产运营监控与决策支持中的关键应用。面对数据爆炸、信息孤岛和实时性不足等挑战,Java 通过高效数据采集、清洗与可视化引擎,助力企业构建实时监控与智能决策系统,显著提升运营效率与竞争力。
|
3月前
|
存储 人工智能 算法
Java 大视界 -- Java 大数据在智能医疗影像数据压缩与传输优化中的技术应用(227)
本文探讨 Java 大数据在智能医疗影像压缩与传输中的关键技术应用,分析其如何解决医疗影像数据存储、传输与压缩三大难题,并结合实际案例展示技术落地效果。
|
3月前
|
存储 数据采集 搜索推荐
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
本篇文章探讨了 Java 大数据在智慧文旅景区中的创新应用,重点分析了如何通过数据采集、情感分析与可视化等技术,挖掘游客情感需求,进而优化景区服务。文章结合实际案例,展示了 Java 在数据处理与智能推荐等方面的强大能力,为文旅行业的智慧化升级提供了可行路径。
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
|
3月前
|
机器学习/深度学习 安全 Java
Java 大视界 -- Java 大数据在智能金融反洗钱监测与交易异常分析中的应用(224)
本文探讨 Java 大数据在智能金融反洗钱监测与交易异常分析中的应用,介绍其在数据处理、机器学习建模、实战案例及安全隐私等方面的技术方案与挑战,展现 Java 在金融风控中的强大能力。