java----多态

什么是多态

     多态是指同一个类型的对象在不同情况下表现出不同的行为。具体来说,多态包括两种类型:静态多态和动态多态。

   静态多态(编译时多态)是通过方法重载实现的,即在同一个类中有多个同名但参数列表不同的方法,编译器会根据传入的参数类型来选择调用哪个方法。

  动态多态(运行时多态)是通过继承和方法重写实现的,即子类可以重写父类的方法,通过父类引用指向子类对象时,根据对象的实际类型来选择调用哪个方法,这种多态性是在运行时确定的。

通过使用多态,可以提高代码的灵活性和可维护性,使得代码具有更好的扩展性和可重用性。

多态的作用是什么   

      多态的作用是使得程序更加灵活和可扩展。它允许将子类对象赋值给父类引用变量,通过父类引用变量调用子类重写的方法,实现了动态绑定。这样,可以在不修改原有代码的情况下,通过增加新的子类来扩展程序功能。 此外,多态还能够提高代码的可读性和可维护性。通过使用父类引用变量,程序员可以统一处理一组相关类的对象。这样可以降低代码的重复性,提高代码的可复用性和可维护性。 总而言之,多态使得程序设计更加灵活、扩展性更好,同时提高了代码的可读性和可维护性。

多态的应用场景   

    以下是多态的一些常见应用场景:

  1. 方法重载(Method Overloading):在同一个类中定义多个具有相同名称但参数列表不同的方法。通过方法重载,可以根据不同的参数类型或参数个数来调用相应的方法。

  2. 方法重写(Method Overriding):子类可以重新定义父类中的方法,并且子类对象可以通过父类引用调用这些方法。这样可以根据具体的对象类型来实现对应的方法逻辑,实现了多态的特性。

  3. 接口(Interface)和抽象类(Abstract Class):接口和抽象类都可以被用来创建多态的对象。通过接口或抽象类,可以定义一组共同的行为,并且允许不同的类实现这些行为,从而实现多态。

  4. 泛型(Generics):泛型可以让你在编译时期确定具体的类型,并在运行时不需要进行类型转换。使用泛型可以编写更加灵活和安全的代码,从而实现多态。

  5. 集合类(Collection Framework):Java的集合类中使用了多态的概念,例如List、Set、Map等,它们可以存储不同类型的对象,并且提供了统一的接口来操作这些对象。

  6. 方法参数和返回值类型:在Java中,方法的参数类型和返回值类型可以使用父类类型,这样可以接收或返回多种子类对象。这种方式可以提高代码的可扩展性和灵活性。

优缺点

  优点:

  1. 扩展性:多态允许我们在不修改现有代码的情况下添加新的子类,从而扩展已有的功能。
  2. 重用性:多态使得我们可以将一段代码应用于多个不同类型的对象上,减少了重复编写代码的工作量。
  3. 可替换性:多态允许我们将一个子类的实例赋值给父类的引用变量,实现代码的解耦,增加了代码的可维护性和可替换性。
  4. 可扩展性:通过继承和多态,可以轻松地添加新的子类或者接口,从而扩展程序的功能。

缺点:

  1. 性能损失:多态的实现需要运行时的动态绑定,这会带来一定的性能损失。在某些对性能要求较高的场景中,可能需要考虑使用其他方式来避免多态的性能损失。
  2. 可读性降低:由于多态可以使一个父类引用变量指向不同类型的子类对象,可能会导致代码的可读性降低,增加代码的维护难度。
  3. 安全性问题:多态允许子类重写父类的方法,这可能导致一些意外的行为发生。需要在设计和使用多态时,注意子类对父类方法的重写规则和行为的一致性,以避免潜在的安全问题。

示例代码  

public class Animal {public void sound() {System.out.println("Animal makes a sound");}
}public class Cat extends Animal {@Overridepublic void sound() {System.out.println("Meow");}
}public class Dog extends Animal {@Overridepublic void sound() {System.out.println("Woof");}
}public class Main {public static void main(String[] args) {Animal animal1 = new Cat();Animal animal2 = new Dog();animal1.sound();animal2.sound();}
}

       在这个例子中,Animal是一个基类,CatDog是继承自Animal的子类。

       在Main类的main方法中,我们创建了Animal类型的引用变量animal1animal2。然而,我们通过使用子类对象来赋值给这些引用变量。

      当我们调用animal1.sound()时,实际上会调用Cat类中的sound方法。这是因为animal1引用的对象是Cat类的一个实例。同样的道理,当调用animal2.sound()时,会调用Dog类中的sound方法。

       这就是多态的特点:通过使用父类的引用变量,可以引用子类的对象,并且在运行时确定使用哪个子类的方法。

     通过多态性,我们可以简化代码并增加可扩展性。当我们需要添加新的子类时,无需改变已有代码,只需要在基类中声明一个新的方法,然后在子类中覆盖该方法即可。这在实际开发中非常有用。

面对对象的三大特性

   面向对象编程具有三大特性:封装、继承和多态。

  1. 封装(Encapsulation): 封装是面向对象编程的基本特性之一,它将数据和方法封装在一个对象中,使得对象对外部只暴露必要的接口,隐藏了内部实现细节,提供了良好的模块化和隔离性。封装可以实现信息隐藏,提高安全性和可维护性。通过定义类和访问修饰符(如private、public、protected),可以控制成员变量和方法的访问权限。

  2. 继承(Inheritance): 继承是面向对象编程的另一个重要特性,允许一个类(子类)继承另一个类(父类)的属性(字段和方法)。子类可以继承父类的非私有成员,包括字段和方法,并且可以在继承的基础上添加自己额外的字段和方法。继承可以实现代码的重用和扩展性,提高了代码的可维护性和可扩展性。

  3. 多态(Polymorphism): 多态是面向对象编程的另一个关键特性,它允许一个对象在不同的上下文中表现出不同的行为。多态能够使用父类类型的引用来引用子类对象,根据实际运行时的对象类型决定调用哪个类的方法。多态提供了灵活性和可扩展性,使得代码更具可读性和可维护性。多态通过继承和方法重写实现。

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

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

相关文章

人类的逻辑常常是演绎、归纳和溯因推理混合

人类的逻辑推理往往是一种综合运用不同推理方式的能力。 演绎推理是从已知的前提出发,推断出必然的结论。通过逻辑规则的应用,人们可以从一些已知的事实或前提出发,得出一个必然成立的结论。演绎推理是一种严密的推理方式,它能够保…

STM32F103标准外设库—— 新建工程与库函数(四)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…

Go新项目-配置文件的选取及区别和写法(1)

先说结论:我们选型TOML yaml,toml,json,ini 实际业务都有用 实际栗子是:我们想要把Go的切片作为配置文件,YAML写起来比较吃力,TOML就很容易了。 配置文件是用于配置计算机程序的参数、初始化设…

文件操作一(非常重要)

文件操作一(非常重要) 一、为什么使用文件?二、什么是文件?三、文件名(简单理解)四、二进制文件和文本文件(重要)五、流的概念(非常重要)六、文件的打开和关闭七、文件的顺序读写函数…

HarmonyOS应用开发者初级认证试题库(鸿蒙)

目录 考试链接: 流程: 选择: 判断: 单选: 多选: 考试链接: 开发者能力认证-职业认证-鸿蒙能力认证-华为开发者学堂 (huawei.com)https://developer.huawei.com/consumer/cn/training/dev-…

芯品荟 | 电脑机箱键盘副屏市场调研报告

一.产品简介 1.带TFT彩屏电脑机箱 2.带小TFT彩屏电脑键盘 为什么电脑机箱&键盘,要带屏? 带屏的电脑机箱&键盘客户群体? 电竞玩家、设计师、电子发烧友、股民...... 二、市场规模 中国电脑机箱年产量约6000万台,键盘年产量约3亿…

从零开始搭建ubuntu 16.04 pwndocker环境

1.安装VMware-tools 1.1遇到问题 在使用 VMware Workstation时遇到了VMware Tools不能安装的问题,具体表现为:在要安装VMware Tools的虚拟机上右键 ----》安装VMware Tools(T)… 为灰色,不能够点击。 1.2解决方案    1. 关闭虚拟机&…

DWM1000 中断与STM32外部中断

DWM1000 中断与STM32外部中断 概述 DWM1000 本身有很多中断控制,例如发送完成中断,接收完成中断等等, 可以通过IRQ(GPIO8) 送到外部控制器。 DWM1000 IRQ pin可以挂到STM32 的外部中断上。 例如当接收到数据帧后,DWM1000 拉IRQ&…

3.goLand基础语法

目录 概述语法for常量与变量数组切片 slice切片问题问题1问题2 Make 和 New结构体和指针结构体标签 结束 概述 从 java 转来学 go &#xff0c;在此记录&#xff0c;方便以后翻阅。 语法 for package mainimport "fmt"func main() {for i : 0; i < 3; i {fmt.…

深度学习记录--偏差/方差(bias/variance)

误差问题 拟合神经网络函数过程中会出现两种误差&#xff1a;偏差(bias)和方差(variance) 偏差和误差的区别 欠拟合(underfitting) 当偏差(bias)过大时&#xff0c;如左图&#xff0c;拟合图像存在部分不符合值&#xff0c;称为欠拟合(underfitting) 过拟合(overfitting) …

腾讯云服务器多少钱一个月?5元/月起多配置报价

腾讯云服务器多少钱一个月&#xff1f;5元一个月&#xff0c;年付62元&#xff0c;这么每个月5.1元&#xff0c;官方活动 https://curl.qcloud.com/oRMoSucP 关于腾讯云服务器一个月价格&#xff0c;腾讯云服务器网txyfwq.com分享大家移步到这个活动查看精准报价。 CPU/内存/公…

Linux look命令教程:在排序过的文件中搜索字符串(附案例详解和注意事项)

Linux look命令介绍 look命令(originally from the unix “look” command)用于在排序过的文件中搜索字符串。通常&#xff0c;look命令被用于查找包含给定字符串的行&#xff0c;这对于检查大型文件并查找特定主题或模式非常有用。 Linux look命令适用的Linux版本 以下是lo…

系统的可观察性是指什么?

系统的可观察性是指什么&#xff1f; 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 系统的可观察性是系统设计的重要一环。不可观察的系统无法度量、无法监控、无法改进。 日志、追踪和度量是系统可观测性的三大支柱。 下图显示了…

链表练习 Leetcode234.回文链表

题目传送门&#xff1a;Leetcode234 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&…

语聚AI集成抖音丨集简云助力北京自由引擎无缝连接AI大模型,为企业提供即时专业支持

客户介绍 北京自由引擎有限公司作为一家快速发展的初创企业&#xff0c;公司以“创业斯基”为主要运营账号&#xff0c;致力于为B2B用户提供AI营销服务。北京自由引擎迅速崭露头角&#xff0c;成为业内瞩目的新星。核心业务包括提供课程和企业服务&#xff0c;尤其专注于使用A…

基于WebSocket双向通信技术实现-下单提醒和催单(后端)

学习复盘和总结项目亮点。 扩展&#xff1a;该功能能应用在&#xff0c;各种服务类项目中。&#xff08;例如&#xff1a;酒店、洗脚城等系ERP系中提醒类服务&#xff09; 4. 来单提醒 4.1 需求分析和设计 用户下单并且支付成功后&#xff0c;需要第一时间通知外卖商家。通…

Scipy 高级教程——高级插值和拟合

Python Scipy 高级教程&#xff1a;高级插值和拟合 Scipy 提供了强大的插值和拟合工具&#xff0c;用于处理数据之间的关系。本篇博客将深入介绍 Scipy 中的高级插值和拟合方法&#xff0c;并通过实例演示如何应用这些工具。 1. 高级插值方法 在插值中&#xff0c;我们通常会…

C++ 程序文档生成器(doxygen)使用说明

程序文档&#xff0c;是每个程序员必看文档&#xff0c;在日常业务开发中&#xff0c;难免会封装一些组件。没有很好的组件文档&#xff0c;再好的组件都是废物&#xff0c;。因此大型业务中&#xff0c;文档和思维导图&#xff0c;两个都是必备&#xff01; 一、注释风格 …

Google上架:2024年一月政策限制之用户生成的内容

为确保 Google Play 用户能够获得安全、值得信赖的使用体验&#xff0c;Google会定期更新开发者计划政策。今天就来讲解一下关于一月新政策《用户生成的内容》。 目录 公布日期&#xff1a;2023-10-25内容公告相关博客截止时间2024-1-31 公布日期&#xff1a;2023-10-25 内容…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第6章 项目管理理论(三)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…