Java 101: Java多态及其类型
本文翻译自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多态及其类型相关推荐
- Java基础十一--多态
Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. 1 /* 2 3 对象的多态性. 4 5 class 动物 6 ...
- 12 Java面向对象之多态
JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类 1. 静态多态:在编译期间,程序就能决定调用哪个方法.方法的重载就表现出 ...
- java中的多态_Java中的多态
多态与HoFs 朋友们好久不见啊,最近笔者同时在写脚本型语言--JavaScript,和工业级的面向对象语言--Java. 在写代码的同时呢,也会思考这些语言的不同.今天就拿 Java 中的多态,来谈 ...
- 何为Java 中的多态?
Java 中的多态一般分为两种:重写式多态和重载式多态. 重载式多态,也叫编译时多态.也就是说这种多态再编译时已经确定好了.重载大家都知道,方法名相同而参数列表不同的一组方法就是重载.在调用这种重载的 ...
- java多态 降低代码耦合性_深度分析:理解Java中的多态机制,一篇直接帮你掌握!...
Java中的多态 1 多态是什么 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.用白话来说,就是多个对象调用同一 ...
- 深入Java核心 Java中多态的实现机制(1)
在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...
- Java学习之 多态 Polymorphism
Java学习之多态 多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一种运行期的行为,不是编译期的行为. 多态:父类型的引用可以指向子类型的对象. 比如 Parent p = ne ...
- Java基础之多态深入解析
Java基础之多态深入解析 多态的基本概念 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性.简单的说:就是用基类的引用指向子类的对象. 多态的优点 消除类型之间的耦合关系 ...
- java基础之多态的详细解释_JAVA基础之多态
下面我为大家讲解一下JAVA基础之多态,希望大家喜欢. 多态就是事物存在的多种形态,比如你在大街上看见一只藏獒,你可以说这只藏獒真凶猛,也可以说这只狗真凶猛,还可以说这个动物真凶猛,以上三种说法其实都 ...
最新文章
- 使用 Google Gears 开发离线应用
- 《利用Python》进行数据分析:Numpy基础2 创建数组
- harbor的镜像复制功能使用教程
- hash和trie的对比
- java list过滤完赋给自己_Java8对list集合进行排序、过滤、分组、去重、转map、遍历赋值等操作...
- 《TOMCAT权威指南》摘抄
- 如何在PFSense中设置故障转移和负载平衡
- SLAM GMapping(6)扫描匹配器
- 【codevs1285】【BZOJ1208】宠物收养所,splay练习
- Android 手势检测实战 打造支持缩放平移的图片预览效果(下)
- JSP自定义标签开发步骤
- c traps and pitfalls reading notes(2)
- ANSYS 有限元分析 网格划分
- 动态数组索引越界问题
- win10查看所有的wifi密码。
- 从零建造一个基于深度强化学习的期货日内高频交易模型(一)下载数据
- Justinmind6.X软件及汉化包下载地址
- MyBatis面试可能会遇见的题
- 冷色调的亮度越高--越偏暖,暖色调的亮度越高--越偏冷
- 本地小说阅读网站打造