当前位置: 首页 > news >正文

java基础之理解多态

目录

简单理解

满足多态的三个条件

有类继承或者接口实现

子类要重写父类的方法

父类的引用指向子类的对象。

代码示例

动态多态

静态多态

个人观点


简单理解

简单理解就是,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

说人话就是,对于一个父类,有个类继承它对吧,我可以重写父类的方法对吧,我可这样重写对吧,又有一个类,也能继承它对吧,也能重写父类的方法对吧,那样重写对吧,这俩类都继承了一个父类,都重写了父类的方法,但是重写的内容不同,这叫多态;同理,有个父接口,两个类对父接口的实现不同,不也是多态。

满足多态的三个条件


如果按照这个概念来定义的话,那么多态应该是一种运行期的状态。为了实现运行期的多态,或者说是动态绑定,需要满足三个条件:


有类继承或者接口实现


子类要重写父类的方法


父类的引用指向子类的对象。

代码示例

// 父类 Animal
class Animal {public void makeSound() {System.out.println("动物发出声音");}
}// 子类 Dog 继承自 Animal
class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("狗发出汪汪的声音");}
}// 子类 Cat 继承自 Animal
class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("猫发出喵喵的声音");}
}public class PolymorphismExample {public static void main(String[] args) {Animal animal1 = new Dog();  // 使用父类引用指向子类对象Animal animal2 = new Cat();  // 使用父类引用指向另一个子类对象animal1.makeSound();  // 调用的是子类 Dog 的 makeSound() 方法animal2.makeSound();  // 调用的是子类 Cat 的 makeSound() 方法//父类引用指向不同的子类对象,展现出多种不同的姿态。}
}

在代码中同样是动物的发出叫声的操作,在狗子身上就是  “汪汪汪”,在猫身上就是 “喵喵喵”(同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果

前面说多态是一种运行期的概念。还有一种说法,包括维基百科也说明,认为多态还分为动态多态和静态多态。
 

动态多态

是指在运行时确定对象的具体类型,并根据对象的类型调用相应的方法。Java中的方法重写就是一种动态多态,因为在运行时,虚拟机会根据对象的实际类型来调用相应的方法。

静态多态

是指在编译时确定函数或方法的具体调用,这种多态性也被称为重载(overloading)。Java中的方法重载就是一种静态多态,因为在编译时就能够确定调用的方法。

个人观点


我认为,多态应该是一种运行期特性,Java中的重写是多态的体现。不过也有人提出重载是一种静态多态的想法,这个问题在StackOverflow等网站上有很多人讨论,但是并没有什么定论。我更加倾向于重载不是多态。

http://www.lryc.cn/news/269022.html

相关文章:

  • 第二证券:A股市场放量反弹 跨年行情或启动
  • web漏洞与修复
  • 基于Java+SpringBoot+vue实现图书借阅管理系统
  • xml文件学习(xml格式)可扩展标记语言(Extensible Markup Language)
  • nodejs+vue+ElementUi家政服务系统c90g5
  • 数据库(Database)基础知识
  • QT应用篇 二、QML用Image组件实现Progress Bar 的效果
  • SElinux工作原理简介并演示chcon、semanage、restorecon的使用方法
  • 表情串转换
  • 【娱乐小技巧】网页旋转90° 3步搞定
  • 移动管理系统软件哪家好?它是如何帮助企业降本增效的?
  • 电脑表格文件丢失如何找回?3个方法拯救丢失的文件!
  • VSCode 如何安装插件的历史版本
  • 关于edge浏览器以及插件推荐
  • Vue Tinymce富文本组件自定义操作按钮
  • 论文阅读:Blind Super-Resolution Kernel Estimation using an Internal-GAN
  • 韩国Neowine车规认证加密芯片ALPU-CV
  • 【每日一题】收集巧克力
  • 【开源】基于Vue+SpringBoot的贫困地区人口信息管理系统
  • 八股文打卡day7——计算机网络(7)
  • 南大通用数据库 GBase 8a 性能调优方法--Hash索引
  • openFeign调用接口时传递表单参数、Json参数、HttpServletRequest对象
  • 中国人民银行总行原稽核司副司长王书刚一行莅临国鑫走访交流
  • 单例模式学习
  • 基于Qt之QChart 图表(优美的曲线图案例)
  • Flink1.17实战教程(第四篇:处理函数)
  • WPF 已有资源字典文件,在xaml 里面引用
  • ImageJ几何测量
  • Docker 使用详解看了挺开悟的
  • Superset二次开发之部署问题汇总