什么是 Java 的多态特性?

news/2025/1/17 17:28:33/文章来源:https://www.cnblogs.com/qimoxuan/p/18677426

多态是指同一个接口或父类引用变量可以指向不同的对象实例,并根据实际指向的对象类型执行相应的方法。

它允许同一个方法在不同的对象上表现出不同的行为,是面向对象编程(OOP)的核心特性之一。

多态的优点:

  • 通过多态,程序可以灵活地处理不同类型的对象,降低代码耦合度,增强系统的可扩展性。新增子类或实现类时,无需修改原有代码,只需通过接口或父类引用调用即可。

扩展知识

多态的意义(理解)

多态其实是一种抽象行为,它的主要作用是让程序员可以面对抽象编程而不是具体的实现类,这样写出来的代码扩展性会更强。

大家可能不是很理解什么是抽象什么是具体,我举个可能不是很恰当但是很好理解的例子:比如某个人很喜欢吃苹果,我们在写文章描述他的时候可以写他很喜欢吃苹果,也可以写他很喜欢吃水果。

水果就是抽象,苹果就是具体的实现类。

假设这个人某天开始换口味了,他喜欢吃桃子了,如果我们之前的文章写的是水果,那么完全不需要改,如果写的是苹果,是不是需要把苹果替换成桃子了?

这就是多态的意义。

再举个代码的例子:

比如 Person person = new Student ()

Person 是父类,含有一个工作的方法,student 重写工作的方法,比如上学。

class Person {void work() {System.out.println("工作");}
}class Student extends Person {@Overridevoid work() {System.out.println("上学");}
}public class Test {public static void main(String[] args) {Person person = new Student();person.work(); // 输出 "上学"}
}

这样在使用的时候,对象都是 person ,但是 new 不同的实现类,表现的形式不同,这也就从字面上解释的什么叫多态。

编译时多态和运行时多态

编译时多态和运行时多态是面向对象编程中多态性的两种实现方式,它们分别在不同的阶段决定方法的绑定。

  • 编译时多态:通过方法重载实现,在编译时确定方法的调用。
  • 运行时多态:通过方法重写实现,在运行时确定方法的调用。

1.编译时多态(Compile-time Polymorphism )

编译时多态,也称为静态多态,是在编译阶段确定方法的调用。编译时多态主要通过方法重载(Method Overloading )实现。

方法重载:指在同一个类中定义多个方法,这些方法的名称相同但参数列表(参数的类型或数量)不同。Java 编译器在编译时会根据方法调用时传入的参数类型和数量,决定调用哪一个重载方法。

示例:

class Example {void display(int a) {System.out.println("Integer: " + a);}void display(double a) {System.out.println("Double: " + a);}void display(String a) {System.out.println("String: " + a);}
}public class Main {public static void main(String[] args) {Example obj = new Example();obj.display(5);         // 调用 display(int a)obj.display(3.14);      // 调用 display(double a)obj.display("Hello");   // 调用 display(String a)}
}

在这个例子中,根据传入的参数类型,编译器在编译时决定调用哪个 display 方法。

2.运行时多态(Runtime Polymorphism )

运行时多态,也称为动态多态,是在运行时确定方法的调用,运行时多态通过方法重写(Method Overriding )实现。

方法重写:子类重写父类的一个或多个方法。通过父类引用调用方法时,实际执行的是子类重写后的方法。这种多态性是在运行是根据对象的实际类型决定的。

示例:

class Animal {void sound() {System.out.println("Animal makes a sound");}
}class Dog extends Animal {@Overridevoid sound() {System.out.println("Dog barks");}
}class Cat extends Animal {@Overridevoid sound() {System.out.println("Cat meows");}
}public class Main {public static void main(String[] args) {Animal myDog = new Dog(); // Animal reference but Dog objectAnimal myCat = new Cat(); // Animal reference but Cat objectmyDog.sound(); // 输出: Dog barksmyCat.sound(); // 输出: Cat meows}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/870872.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chrome浏览器访问网址报错:Whitelabel Error Page!

谷歌浏览器访问网址时,报错: Whitelabel Error Page 原因分析:由于该网址暂时没有找到页面,导致指向错误。 本例说明:原网址对应解析的二级域名为 566.example.com,现在改为aibf.example.com;因为新该的二级域名,暂时解析未生效,导致报错。 处理方法:1.确认二级域名解…

java基础Day3 java语法

java语法 新建一个空项目,在项目中新建一个java模块 文件菜单中打开项目结构,SDK有报红,要手动选,语言级别也要和SDK对应注释 //单行注释/*多行 注释*//**文档注释* @Description HelloWorld* @Author tse121*/标识符 关键字Demo01所有的标识符都应该以大小写字母、美元符$…

LossVal:一种集成于损失函数的高效数据价值评估方法

在机器学习领域,训练数据的价值并非均等:部分训练数据点对模型训练的影响显著高于其他数据点。评估单个数据点的影响程度通常需要反复重训练模型,计算效率低下。LossVal提出了一种创新方法,通过将数据价值评估过程直接集成到神经网络的损失函数中,实现了高效的数据价值评估…

企业项目管理工具选择:多维度评估,精准决策

企业在选择项目管理工具时,应综合考虑需求、服务商与产品、试用体验、培训与实施以及市场推荐与排行榜等多个因素。通过全面评估这些因素,企业可以选择出最适合自己的项目管理工具,从而提升项目管理效率和团队协作能力。企业在选择适合自己的项目管理工具时,需要考虑多个因…

工作也有利息

一、工作也有利息 银行存款有利息,存得越久,利息越多。 工作也是一样,也有利息。如果今年的工作可以节省明年或未来的工作时间,就是一份有利息的工作。工作有利息,意味着你未来的工作时间会变少,多出来的时间,就可以去做别的事情,创造更多的价值。 这提示我们: (1)不…

docker swarm ingress网络

DOCKER INGRESS 介绍 # docker ingress官网介绍:https://docs.docker.com/engine/swarm/ingress/如docker官网所述,swarm 模式下使用ingress routing mesh 路由,可以实现服务在一个节点发布后,访问swarm任意节点地址都可以访问到该服务,即使该node节点没有该服务副本在运行…

windows11 远程桌面 自动断开连接原因

前短时间始终找不到远程桌面断开连接的原因就,今天终于找到原因了原因是前段时间自己更改端口得时候,只修改了一个,导致部分数据会报错。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp和HKEY_LOCAL_MACHINE\SYSTEM\CurrentContr…

记录电脑无法挂载nas硬盘

今天试了好几次始终报错,突然发现了问题所在 直接使用根目录是会报错得如图:直接报错,但是直接在地址栏输入是可以成功得。如图:时候证明不能直接挂载根目录,需要挂到根目录下一级

岸场桥对位引导系统(CPS)

岸场桥对位引导系统(CPS),是由经纬恒润自主研发的一款基于多线激光雷达的车辆精准对位产品。CPS能够快速为无人集卡及港口有人车辆提供具体距离与方向上的引导,从而为装卸集装箱的过程实现高度自动化提供保证。相对传统基于单线激光雷达的CPS,经纬恒润CPS具有多车道同时检…

ffmpeg简易播放器(2)--了解音频格式

声音是个啥 初中物理学过,声音是由物体振动产生的,声音是一种机械波,传播的介质是空气。声音的频率决定了声音的音调,频率越高,音调越高。声音的振幅决定了声音的大小,振幅越大,声音越大。 也就是说,声音实质上是一个连续的信号,他有着频率以及振幅这两个基本属性。而…

打造高效团队,助力电商实现增长目标

一、电商团队的核心增长目标与痛点 在企业的快速发展中,电商团队作为直接面对市场和消费者的核心部门,承担着推动企业增长的重任。常见的增长目标包括提升销售额、优化转化率、增强品牌影响力等。然而,电商团队在实现这些目标的过程中,往往面临以下挑战: 1. 跨部门沟通成本…

【linux合集】redis集群部署

集群式部署redis 介绍: 三台机器 001、002、003 然后再三台机器上面都部署redis_6379、redis_6380做主从,然后三台机器上面做集群 1、安装/解压redis mkdir -p /data/applications/ wget https://download.redis.io/releases/redis-5.0.14.tar.gz tar -xzf ./redis-5.0.14.ta…