Java基础:第三十九讲 多态

Java基础-多态实现原理 多态是面向对象编程里面的概念,一个接口的多种实现不同的实现方式,即为多态这里的接口不应理解得太死板,比如在 Java 里面,继承一个类和实现一个接口本质上都是一种继承行为,因此都可以理解为多态的体现。从静态和动态的角度进行划分,多态可以分为编译时多态和运行时多态。编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法,编译之后会变成两个不同的方法。而运行时多态是动态的,是通过动态绑定来实现的,也就是大家通常所说的多态性,本篇博客主要讨论运行时多态。 阅读详情

简单的讲,多态就是同一种功能具有多种实现方式。

多态有两种类型:同一个类中某个行为的多种实现方式;不同子类对相同行为的不同的实现方式。

1、同一个类中某个行为的多种实现方式

在实现某个功能的时候可以采用不同的方式,通常采用相同的名字,而参数不同。例如要初始化一个矩形,可以给出左上角的坐标和矩形的长宽,也可以给出左上角的坐标和右下角的坐标。

public class Rectangle{

      private int left;  // 左上角横坐标

     private int top; //左上角纵坐标

     private int width; // 宽

     private int height; // 高

     public void initiate(int left,int top,int width,int height){

         this.top = top;

        this.left = left;

        this.width = width;

        this.height = height;

     }

     public void initiate(Point lefttop,Point rightbottom){

         top = lefttop.getY();

        left = lefttop.getX();

       width  = rightbottom.getX() - lefttop.getX();

      height = rightbottom.getY() - lefttop.getY();

     }

}

另外,可以考虑构造方法。构造方法用于构造对象,有各种不同的构造对象的方法,所以会有多种构造方法,多个构造方法都是用于构造对象,这就是多态。

2、不同子类有不同的实现方式

在上一讲中描述的图形类的画图方法以及交通工具的移动方法都是多态的典型例子。

对于图形类,具有画图的方法,但是三角形、矩形和圆的画法不同,所以会有不同的实现方式。这种多态与上面介绍同一个类中某个功能的多个实现方式不同,前面是同类的某个功能的不同实现方式,而现在是不同子类的不同实现方式。下面以计算面积为例介绍。

public abstract class Graphics{

   public abstract  void print(); // 画图的方法

   public abstract float area(); //计算面积

}

public class Circle extends Graphics{

     private int r; //

     private int left; // 圆心的左上角横坐标

     private int top; // 圆心的左上角纵坐标

     public void print(){

         ...

     }

     public float area(){

        return 3.1415*r*r;

     }

}
 

public class Rectangle extends Graphics{

     private int left; // 圆心的左上角横坐标

     private int top; // 圆心的左上角纵坐标

     private int width; // 宽

     private int height; // 高

     public void print(){

         ...

     }

     public float area(){

        return height*width;

     }

}

3、多态性的应用

对于上面第一种形式的多态,方法的调用通过对象名字,要调用哪个方法就写相应的方法名字并提供相应的参数即可。对于第二种形式的多态,如果分别定义子类的对象然后调用相应的方法,与其他普通的方法就没有什么区别了,例如下面的代码:

public static void main(String[] args){

      Circle circle = new Circle(); // 创建圆对象

      circle.setTop(20);   // 此行及以下两行用于初始化

      circle.setLeft(30);

      circle.setR(10);

      System.out.println(circle.area());  //调用计算面积的方法并输出

      Rectangle rectangle = new Rectangle ();

      rectangle .setTop(20);

      rectangle .setLeft(30);

      rectangle .setWidth(10);

      rectangle .setHeight(10);

      System.out.println(rectangle.area());

}

那多态性如何体现呢?请看下次的向上转型和强制类型转换。

李绪成 优快云 Blog: http://blog.youkuaiyun.com/javaeeteacher
java第八讲:多态 如彩色打印机和黑白打印机都是打印机的一个实例,针对打印这一行为,彩色打印机的效果是彩色的,黑白打印机的效果是黑白的。子类中定义了与父类同名同参数的方法,在多态情况下,将此时父类的方法称为虚拟方法,父类根据赋给它的不同子类对象,动态调用属于子类的该方法。这样的方法调用在编译期是无法确定的。一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法。子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象向上转型(upcasting)。......... 阅读详情

相关推荐

[0352]基于JAVA的停车场收费智慧管理系统的设计与实现

其次,从经营管理层面考虑,本系统涵盖了丰富的月卡管理和财务结算功能,如月卡用户管理、缴费、注销、挂失、解挂、补办等全流程服务,以及临保和月保的结算汇总与欠费查询等功能,这不仅有助于规范停车场的日常运营管理,更能有效提高财务管理效率,降低运营成本,实现精细化、数字化的财务管控。综上所述,本课题计划研发的基于Java的停车场收费智慧管理系统将在现有研究成果的基础上,重点优化月卡用户全生命周期管理和财务统计分析功能,以满足现代停车场高效、精准、安全的管理需求,紧跟行业发展趋势,为推动智慧城市的建设贡献一份力量。

muyu2980的专栏 590

java getfloat_java中的float缓冲区FloatBuffer

一、概述:java.lang.Objectjava.nio.Bufferjava.nio.FloatBufferpublic abstract class FloatBufferextends Buffer implements Comparable此类定义了 float 缓冲区上的四类操作:读写单个 float 的绝对和相对 get 和put 方法;将此缓冲区中的连续 float 序列传输到数组...

weixin_39545102的博客 497

VMware ESXi +DELL虚拟化存储磁盘容量处于紧急状态问题的处理

1、环境介绍 exsi server两台(DELL R730 ): 192.168.3.206 VMware EXSi6.5 192.168.3.207 VMware EXSi6.5 磁盘存储柜一台(DELL SC2000): 192.168.3.208 2、故障处理 由于前期规划的卷空间过大,虚拟机文件逐年增大以后,造成卷的磁盘占用过与整个磁盘空间的容量,虚拟化平台可用容量爆掉,DELL SC2000自动切换到紧急状态,禁止所有磁盘I/O,exsi主机上的虚拟机无法开机 首先,安装

wolf1105的博客 3534

Java程序设计——继承与接口

一、子类与父类 使用关键字extends来声明一个类的子类,格式如下: class 子类名 extends 父类名 { … } 例如: class Student extends People { … } 把Student类声明为People类的子类、People类是Student类的父类 如果一个类的声明中没有使用extends关键字,这个类被系统默认为是Object的子类。Object是java.lang包中的类。 二、子类的继承性 所谓子类继承父类的成员变量作为自己的一个成员变量

Mr_John 3325

【效率手册】Kylin-Desktop-V10-SP1 麒麟系统核心组件实战——从入门到精通的6个关键场景

本文针对Kylin-Desktop-V10-SP1麒麟系统用户,通过文件管理、系统监视、设置优化等6个核心场景实战,深度解析如何高效运用系统内置工具解决文件混乱、性能卡顿、外设驱动等实际问题,帮助用户从功能认知跃升至场景化应用,真正释放国产操作系统的生产力潜能。

weixin_29208327的博客 119

一生一芯——用RTL实现最简单的处理器NPC(南大数逻计组RV32ICPU) 代码及思考参考

本文介绍自己前期用Verilog编写的基于RV32I指令集的CPU,个人认为是最简单最易懂的版本(即没做什么优化,即代码很水,没有考虑一些奇怪的情况,只适用简单指令序列,即题目所示最简单的处理器),适合新手练手Verilog以及了解简单CPU的运行过程。本文基于一生一芯,利用Verilator进行仿真,并用gtkwave查看波形,不了解verilator和gtkwave的可以看前几篇文章。

long0_o的博客 3310

【Java 基础】:三大特征之多态

本文详细介绍了Java中的多态性,包括多态的基本概念、继承、多态的实现条件、重写、向上转型等。多态性允许父类引用指向子类对象,提供了代码的灵活性和可扩展性,但也存在不能使用子类特有功能的缺点。通过实例展示了如何实现和利用多态性。

island1314的博客 2782

在Allegro设计界面中如何修改封装焊盘

在高密度板的情况下,SUIPLA(支持内层没有的焊盘摘掉)打勾,在高密度板的情况下,内层没有的焊盘摘掉可以增加走线的空间。3、修改完焊盘后,选择File→Update to Design(更新到设计)。然后关闭焊盘修改对话框即可。,将会定期不定期更新技术文章,互相学习交流。或者点击Options选项卡下要修改的焊盘,然后点击Edit修改。在Allegro PCB设计界面中修改封装焊盘的方法。2、然后点击封装上要修改的焊盘,右击选择Edit。修改完成后如下图所示。

bhxc809751502的博客 7807

JAVA基础:封装、继承和多态(详讲)

面向对象的三大特征 : 封装, 继承, 多态。将属性和方法组合在一起(封闭在一起)将属性隐藏起来, 对外提供可以间接操作属性的方法。(提高程序设计安全性)目前我们都是属性私有化, 并提供与之对应的get和set方法封装应用工具,为其他的程序员提供功能帮助。这是一种封装设计但不是语法要求,是一种约定俗称。一般的要求是,属性私有, 其对应的get和set方法就是在get和set后面连接属性名特殊的get和set方法get和set方法的写法不一定完全一致。

weixin_53755148的博客 2570

基于YOLOv8的人群聚集检测系统:含UI界面设计与数据集应用

人群聚集检测是智慧城市、公共安全和疫情防控等领域的重要任务。本文结合YOLOv8最新目标检测技术,设计并实现了一个高效的人群聚集检测系统,支持可视化UI界面操作,方便用户实时检测和分析视频中的人群密度。本文详细介绍了系统设计思路、使用的数据集、YOLOv8模型训练和推理过程,以及UI界面的开发与整合。最后通过实验验证了该系统的实用性和性能表现。更灵活的模型架构强化的特征融合网络(PAN++)自动混合精度训练支持支持多任务学习(目标检测+分类+分割)预训练模型丰富,适应多种应用场景。

YOLO 434

从工具选型到落地实践:吃透 SAP Fiori Launchpad 配置工具体系

摘要: SAP Fiori Launchpad配置远非简单添加应用和分配角色,涉及技术目录、业务目录、Spaces/Pages等多层管理。官方推荐新工具分工:技术目录用FLPAM维护应用定义,业务目录用FLPCM编排应用组合,Spaces/Pages优化用户体验布局,而传统Groups模式已被标记弃用。这种分层治理模式(定义层-编排层-展示层)能有效解决传输混乱、升级兼容性问题,尤其适合大规模项目实施。关键在于区分技术配置与业务呈现,避免将所有功能堆砌在单一旧工具中。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 103

Java基础-多态

多态是Java面向对象编程中非常重要的特性,它提高了代码的可扩展性和可维护性。通过多态,我们可以:编写更通用的代码更容易扩展系统功能降低模块间的耦合度提高代码的复用性。

Jianshu_Ma的博客 1701

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java基础之Java的多态

在本文中,我们深入探讨了Java多态性的概念、实现方式以及它在面向对象编程中的重要性。多态性是Java语言的核心特性之一,它允许我们通过父类引用调用子类的方法,从而增强了代码的灵活性和可扩展性。我们学习了多态的两种类型:编译时多态和运行时多态,以及它们在实际编程中的应用。编译时多态主要通过方法重载和重写实现,而运行时多态则依赖于继承和方法重写。同时,我们也指出了多态的一些限制,例如无法访问子类特有的方法和属性。

daadaddc的博客 2311

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java基础(八):封装、继承、多态性

从类的定义来看,类是一类具有相同特性的事物的抽象描述。而实例变量和实例方法就是事物的特征,那么父类中声明的实例变量和实例方法代表子类事物也有这个特征。如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有空参的构造器,则。所以继承意味着子类的对象除了看子类的类模板还要看父类的类模板。问题:在创建子类对象的过程中,一定会调用父类中的构造器吗?一个引用类型变量可能指向(引用)多种不同类型的对象。特别说明:应该避免子类声明和父类重名的成员变量。问题:创建子类的对象时,内存中到底有几个对象?

从基础到源码解析的学习记录 2985

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

详解 Java 基础的多态机制

多态(Polymorphism)是面向对象编程(OOP)的三大核心特性之一,指同一操作作用于不同对象时,可以产生不同的行为。编译时多态:方法重载(Overload),根据参数列表在编译时确定调用哪个方法。运行时多态:方法重写(Override),通过继承和接口实现,在运行时动态绑定具体方法(本文重点// 父类:动物基类// 抽象方法:强制子类实现叫声// 子类:狗@OverrideSystem.out.println(getName() + ":汪汪汪!");// 特有方法。

qq_45729306的博客 1万+

Java多态性:Java什么是多态?

多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。 对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通...

jijiangpeng的博客 5551

Java基础(多态实现原理)

Java基础(多态实现原理)

Thinking In Java 2万+

Java——多态的基础知识

例如:若干年前的手机,只能打电话,发短信,来电显示只能显示号码,而今天的手机在来电显示的时候,不仅仅可以显示号码,还可以显示头像,地区等。圈复杂度是一种描述一段代码复杂程度的方式.一段代码如果平铺直叙,那么就比较简单容易理解.而如果有很多的条件分支或者循环语句,就认为理解起来更复杂.因此我们可以简单粗暴的计算一段代码中条件语句和循环语句出现的个数,这个个数就称为"圈复杂度".如果一个方法的圈复杂度太高,就需要考虑重构.不同公司对于代码的圈复杂度的规范不一样.一般不会超过10.重写的概念:也称为覆盖。

2302_79485648的博客 1439

java基础:继承和多态

本文主要介绍了Java中的继承和多态两大面向对象特性。继承通过extends关键字实现,子类可以复用父类的属性和方法,但Java仅支持单继承,且子类构造方法默认调用父类的无参构造。多态分为编译时多态(方法重载)和运行时多态(方法重写),通过父类引用指向子类对象实现。多态的优点包括消除类型耦合、提高代码复用性等,但无法调用子类特有的方法。文章还通过类A、B、C、D的继承关系和多态调用示例,展示了继承和多态的实际应用,并分析了不同调用情况下的输出结果。

2301_78125917的博客 1086

Java基础_多态

父类的引用指向了子类的对象语法:父类类型引用名 = new 子类类型();在向上转型时,父类引用指向了子类的对象,但是不能访问子类中特有的属性和方法,所以可以将父类引用向下转型,这样编译类型和运行类型就都是子类了,访问属性和方法的顺序恢复:都是从子类开始找,如果找不到再从父类找数组的定义类型为父类类型,里面保存的实际元素类型为子类类型。

Sun的个人博客 1260

Java多态:多态多态,多种形态

Java多态:灵活处理对象的行为展现机制

子夜的个人博客 1745

Java基础——多态(继承多态、接口多态)

多态 多态的概念 定义 多态 polymorphism :对象根据所接收的消息而做出动作,同样的消息为不同的对象接收时可导致完全不同的行动,该现象 称为多态性 静态绑定 编译时多态 指在编译程序时就根据调用方法提供的信息,把它所对应的具体方法确定下来。即 在编译时就把调用方法名与具体方法绑定在一起方法重载 动态绑定 运行时多态 指在编译程序时还不能确定方法调用所对应的具体方法,只有在程序运行过程中才能确定具体的方法。 即 在程序运行时才把调用方法名与具体方法绑定在一起继承多态、接口多态 为何需要多态?

榴莲男孩的博客 4425

【Java 百“练”成钢】Java 基础:多态

在 Java 核心中,多态性是一个易于理解的概念。多态的定义是:Poly 表示许多,morphos 表示形式。它描述了语言的一种特性,即允许根据上下文在不同情况下正确解释同一个单词或符号。Java 中有两种多态性。例如,在英语中,动词 run 与 a footrace、business 或 a computer 一起使用时会有不同的含义。您可以根据与 run 搭配使用的其他单词来理解 run 的含义。

Data · Model · Agent · Repeat 1212

Java的多态

Java多态是面向对象编程的核心特性,包括编译时多态和运行时多态。

2401_84284464的博客 1158
上一篇: Java基础:第三十八讲 抽象类与抽象方法
下一篇: Java基础:第四十讲 向上转型和强制类型转换
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值