本文翻译自javaworld,原文链接https://www.javaworld.com/article/3033445/java-101-polymorphism-in-java.html。

多态性是指某些实体以不同的形式出现的能力。它通常可以通过蝴蝶来说明,从幼虫到蛹再到成虫。多态也出现在编程语言中,作为一种建模技术,允许你为各种操作数、参数和对象创建单个接口。Java多态让代码更加的简洁,并且更容易维护。

虽然本教程侧重与多态性的子类型,但是多态的几种类型你也应该知道。首先我们将概述多态的四种类型。

Java中的多态类型

在Java中有四种多态类型。

强制类型转换操作支持多个类型隐式的转换。比如,你用一个整数乘另一个整数,或者一个浮点数乘另一个浮点数。如果一个操作数是整数但是另一个操作数是浮点数,编译器为了防止类型错误就会将整数隐式的转换成浮点数(没有乘法操作支持一个整数和浮点数相乘)。另一个例子是将一个方法中的父类参数指向一个子类的引用。编译器会强制将子类型转换成父类型。

重载是指在不同的上下文中使用相同的操作符或者方法名。例如,你可以使用 + 去执行整数加法,浮点数加法,或者字符串连接,这依赖于操作数的类型。同样,一个类中可以出现多个具有相同名字的方法(通过声明或者继承)。

参数多态性规定在类的生命中,一个字段名可以关联不同的类型,一个方法名可以关联不同的参数和返回值类型。这个字段和方法之后可以接受一个类实例(对象)的不同类型。例如,在一个对象中一个字段可能是Double类型(Java标准类库的成员,double的包装类型)同时一个方法也可能返回一个Double类型,同时一个相同的字段可能是String类型、相同的方法可能返回一个String类型在另一个对象中。Java通过泛型来支持参数的多态性,我们在之后的文章中会讨论到这些。

子类型是指该类型可以作为一个类型的子类型。当一个子类型实例出现在父类型的的上下文中时,在实例上执行一个父类型的操作最终执行的会是子类型的版本。比如,考虑一段可以绘制任意类型的图形的代码。你可以通过一个图形类和一个draw方法更清楚的表达这段代码;通过圆形、长方形或者其他的子类来重写draw方法。通过一个元素指向图形子类实例的图形类型数组;然后让每个实例调用图形类的draw方法。当你调用draw方法,然后将会是圆形的,长方形的或者其他图形实例的draw方法将会被调用。我们说这就是图形draw方法的多种形式。

这里重点介绍了子类型多态性。你将学习到向上转型和延迟绑定,抽象类(无法实例化),抽象方法(无法被调用)。你还将学习到向下转型和运行时类型确定,并且你将第一次看到可变返回类型。我将在后面的文章中重点介绍参数的多态性。

特定和通用多态性
像许多开发者一样,我将强制类型转换和重载作为特定多态性,将参数和子类型作为通用多态性。作为有价值的技术,我不认为强制类型转换和重载是真的多态;他们更像是类型转换和语法糖。

Java 101: Java多态及其类型相关推荐

  1. Java基础十一--多态

    Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. 1 /* 2 3 对象的多态性. 4 5 class 动物 6 ...

  2. 12 Java面向对象之多态

    JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类 1. 静态多态:在编译期间,程序就能决定调用哪个方法.方法的重载就表现出 ...

  3. java中的多态_Java中的多态

    多态与HoFs 朋友们好久不见啊,最近笔者同时在写脚本型语言--JavaScript,和工业级的面向对象语言--Java. 在写代码的同时呢,也会思考这些语言的不同.今天就拿 Java 中的多态,来谈 ...

  4. 何为Java 中的多态?

    Java 中的多态一般分为两种:重写式多态和重载式多态. 重载式多态,也叫编译时多态.也就是说这种多态再编译时已经确定好了.重载大家都知道,方法名相同而参数列表不同的一组方法就是重载.在调用这种重载的 ...

  5. java多态 降低代码耦合性_深度分析:理解Java中的多态机制,一篇直接帮你掌握!...

    Java中的多态 1 多态是什么 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.用白话来说,就是多个对象调用同一 ...

  6. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  7. Java学习之 多态 Polymorphism

    Java学习之多态 多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一种运行期的行为,不是编译期的行为. 多态:父类型的引用可以指向子类型的对象. 比如 Parent p = ne ...

  8. Java基础之多态深入解析

    Java基础之多态深入解析 多态的基本概念 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性.简单的说:就是用基类的引用指向子类的对象. 多态的优点 消除类型之间的耦合关系 ...

  9. java基础之多态的详细解释_JAVA基础之多态

    下面我为大家讲解一下JAVA基础之多态,希望大家喜欢. 多态就是事物存在的多种形态,比如你在大街上看见一只藏獒,你可以说这只藏獒真凶猛,也可以说这只狗真凶猛,还可以说这个动物真凶猛,以上三种说法其实都 ...

最新文章

  1. 使用 Google Gears 开发离线应用
  2. 《利用Python》进行数据分析:Numpy基础2 创建数组
  3. harbor的镜像复制功能使用教程
  4. hash和trie的对比
  5. java list过滤完赋给自己_Java8对list集合进行排序、过滤、分组、去重、转map、遍历赋值等操作...
  6. 《TOMCAT权威指南》摘抄
  7. 如何在PFSense中设置故障转移和负载平衡
  8. SLAM GMapping(6)扫描匹配器
  9. 【codevs1285】【BZOJ1208】宠物收养所,splay练习
  10. Android 手势检测实战 打造支持缩放平移的图片预览效果(下)
  11. JSP自定义标签开发步骤
  12. c traps and pitfalls reading notes(2)
  13. ANSYS 有限元分析 网格划分
  14. 动态数组索引越界问题
  15. win10查看所有的wifi密码。
  16. 从零建造一个基于深度强化学习的期货日内高频交易模型(一)下载数据
  17. Justinmind6.X软件及汉化包下载地址
  18. MyBatis面试可能会遇见的题
  19. 冷色调的亮度越高--越偏暖,暖色调的亮度越高--越偏冷
  20. 本地小说阅读网站打造

热门文章

  1. MSDC 4.3 接口规范(22)
  2. Apache Hudi的编译及安装
  3. ubuntu关机或重启出现memtest
  4. Solr与MongoDB集成,实时增量索引[转]
  5. 如何为word增加页码,且第一页不显示页码?
  6. Sublime Text3轻量型跨平台C/C++开发环境(上) 安装使用篇
  7. 为何农历10月1号要祭祖上坟?原来有这么多讲究,你知道吗?
  8. 跟随艺术家林曦的脚步 学习“只生欢喜不生愁”的生活态度
  9. 大数据典型的应用场景
  10. 整型和字符串相互转换