Java中多态性的实现方式

发布时间 - 2026-01-11 03:20:47    点击率:

什么是多态

  • 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。
  • 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
  • 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
  • 多态的作用:消除类型之间的耦合关系。
  • 现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

下面是多态存在的三个必要条件,要求大家做梦时都能背出来!

多态存在的三个必要条件

一、要有继承;
二、要有重写;
三、父类引用指向子类对象。

 多态的好处:

1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。

2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。

3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。

4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。

5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。

一个小题目:

(一)相关类

class A ...{ 
  public String show(D obj)...{ 
  return ("A and D"); 
  } 
  public String show(A obj)...{ 
  return ("A and A"); 
  } 
} 
class B extends A...{ 
  public String show(B obj)...{ 
  return ("B and B"); 
  } 
  public String show(A obj)...{ 
  return ("B and A"); 
  } 
} 
class C extends B...{} 
class D extends B...{} 


(二)问题:以下输出结果是什么?

A a1 = new A(); 
  A a2 = new B(); 
  B b = new B(); 
  C c = new C(); 
  D d = new D(); 
  System.out.println(a1.show(b)); ① 
  System.out.println(a1.show(c)); ② 
  System.out.println(a1.show(d)); ③ 
  System.out.println(a2.show(b)); ④ 
  System.out.println(a2.show(c)); ⑤ 
  System.out.println(a2.show(d)); ⑥ 
  System.out.println(b.show(b)); ⑦ 
  System.out.println(b.show(c)); ⑧ 
  System.out.println(b.show(d)); ⑨  


(三)答案

① A and A
② A and A
③ A and D
④ B and A
⑤ B and A
⑥ A and D
⑦ B and B
⑧ B and B
⑨ A and D

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Java  # 多态性  # 详解java封装继承多态  # Java面向对象程序设计多态性示例  # 浅谈Java中的重载  # 重写  # 多态  # 静态绑定、动态绑定  # 关于Java三大特性之多态的总结  # java对象类型转换和多态性(实例讲解)  # 谈谈对Java多态性的一点理解  # 简单了解Java多态向上转型相关原理  # 子类  # 弹出  # 要有  # 必要条件  # 都是  # 这是  # 扩充性  # 基础上  # 都能  # 是指  # 最重要  # 三大  # 不胜枚举  # 很容易  # 这两个  # 如图  # 按下  # 所示 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  如何在阿里云完成域名注册与建站?  如何破解联通资金短缺导致的基站建设难题?  Laravel如何创建自定义Artisan命令?(代码示例)  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  C++用Dijkstra(迪杰斯特拉)算法求最短路径  如何用搬瓦工VPS快速搭建个人网站?  中山网站制作网页,中山新生登记系统登记流程?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  专业商城网站制作公司有哪些,pi商城官网是哪个?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  再谈Python中的字符串与字符编码(推荐)  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Bootstrap CSS布局之列表  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  Laravel如何使用Livewire构建动态组件?(入门代码)  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  如何用花生壳三步快速搭建专属网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Java解压缩zip - 解压缩多个文件或文件夹实例  北京企业网站设计制作公司,北京铁路集团官方网站?  网站建设要注意的标准 促进网站用户好感度!  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  如何在IIS中配置站点IP、端口及主机头?  php485函数参数是什么意思_php485各参数详细说明【介绍】  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  如何在IIS服务器上快速部署高效网站?  怎么用AI帮你为初创公司进行市场定位分析?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  香港服务器选型指南:免备案配置与高效建站方案解析  高防服务器如何保障网站安全无虞?  Java遍历集合的三种方式  Android使用GridView实现日历的简单功能  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel如何优化应用性能?(缓存和优化命令)  北京网站制作公司哪家好一点,北京租房网站有哪些?