品味Java子类型多态的魅力

摘要:

Java程序员经常运用对象的多态性使其在适当的地方调用适当的方法,显得很神奇。这种方法通过继承机制来实现。然而,一个严谨的实验可以使其变得很明白,并揭示了,把多态性理解为与类型相关的概念更为合适,比继承机制的解释更好。这种理解可以帮助程序员更好的运用多态。

------WM.保罗 罗格斯

“polymorphism(多态)”一词来自希腊语,意为“多种形式”。多数Java程序员把多态看作对象的一种能力,使其能调用正确的方法版本。尽管如此,这种面向实现的观点导致了多态的神奇功能,胜于仅仅把多态看成纯粹的概念。

Java中的多态总是子类型的多态。几乎是机械式产生了一些多态的行为,使我们不去考虑其中涉及的类型问题。本文研究了一种面向类型的对象观点,分析了如何将对象能够表现的行为和对象即将表现的行为分离开来。抛开Java中的多态都是来自继承的概念,我们仍然可以感到,Java中的接口是一组没有公共代码的对象共享实现。

多态的分类

多态在面向对象语言中是个很普遍的概念.虽然我们经常把多态混为一谈,但实际上有四种不同类型的多态。在开始正式的子类型多态的细节讨论前,然我们先来看看普通面向对象中的多态。

Luca Cardelli和Peter Wegner("On Understanding Types, Data Abstraction, and Polymorphism"一文的作者, 文章参考资源链接)把多态分为两大类----特定的和通用的----四小类:强制的,重载的,参数的和包含的。他们的结构如下:


在这样一个体系中,多态表现出多种形式的能力。通用多态引用有相同结构类型的大量对象,他们有着共同的特征。特定的多态涉及的是小部分没有相同特征的对象。四种多态可做以下描述:

强制的:一种隐式做类型转换的方法。

重载的:将一个标志符用作多个意义。

参数的:为不同类型的参数提供相同的操作。

包含的:类包含关系的抽象操作。

我将在讲述子类型多态前简单介绍一下这几种多态。

时间: 2024-11-03 21:34:28

品味Java子类型多态的魅力的相关文章

java 关于在多态里用循环判断调用枚举类型,在枚举类型数量多的情况下我想寻求更简便的处理方式

问题描述 java 关于在多态里用循环判断调用枚举类型,在枚举类型数量多的情况下我想寻求更简便的处理方式 //enum GetWheels.java public enum GetWheels{ ONE_WHEEL,TWO_WHEELS,THREE_WHEELS; } //Cycle.java class Cycle{ public void wheel(GetWheels g){ System.out.println("Cycle.wheel() "+g); } } //RideCy

java接口类型作为成员变量,请教下大家

问题描述 java接口类型作为成员变量,请教下大家 先有一个接口A,类B实现了接口A,而接口A的引用作为类B的一个成员变量,怎么理解这种写法??新手不太明白,谢谢大家 解决方案 面向借口的变成有一个最大的好处是方便扩展.B类中有一个成员变量的类型是A,比如说再有一个C impl A,那么B 中可以存放C对象,如果还有另外一个D也impl了A,同样也可以存放D的实例化对象(java的三大特性之一:多态),在不确定的情况下,就只好定义接口A,又下级调用者赋值,最根本的目的是为了程序的可扩展性. 解决

变量-Java 中,多态和动态绑定 是一个意思吗?

问题描述 Java 中,多态和动态绑定 是一个意思吗? 我查了一些手头仅有的资料(包括书籍,QQ群,百度),找到的答案都不是很明确,自己目前的理解如下, 多态:指父类引用类型变量指向子类的对象,这样一种状态. 动态绑定:指在多态的情况下,在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法,指这样一种过程. 另外,马士兵在他的java基础视频教学中说"多态就是动态绑定".....感觉不太对阿.. 求大虾指点~~ 解决方案 多态不仅是父类引用子类,继承也是多态

java中关于多态使用的困惑?

问题描述 java中关于多态使用的困惑? A是父类,B是子类.A a = new B();这是多态中的父类引用指向子类对象,可以调用子类中重写了父类的方法. 但我有一点不明白,既然调用重写了父类方法的子类,那么我直接创建一个子类的对象,也可以达到相同的效果,那我为什么还要使用这样的向上转型呢?哪里又需要用到呢? 谢谢大家解惑. 解决方案 你说得是这样的,但是大多数情况下,我们写代码时,关联的都是上层抽象类型,即我们只关心拥有某个对象的上层类型,而不关心它具体是哪种类型,那么不管外界给我们哪种它的

Java中的多态用法实例分析_java

本文实例讲述了Java中的多态用法.分享给大家供大家参考.具体分析如下: 多态,是面向对象的程序设计语言最核心的特征.封装性.继承性都比较简单,所以这里只对多态做一个小小的笔记... 1.什么是多态? 多态意味着一个对象可以多重特征,可以在特定的情况下,表现出不同的状态,从而应对不同的属性和方法.在Java中,多态的实现指的是使用同一个实现接口,以实现不同的对象实例. 例如,我们定义一个Parent类,再定义一个getName()方法返回一个字符串,定义一个形参为Parent类型的成员方法doS

细化解析在数据库中用子类型设计关系表

理论上,在设计过程中揭示的每一个实体都会产生一个表.如果应用程序处理员工,就会建立一个员工表:如果那些员工中有经理,就会有一个经理表. 但实际上,如果两个实体十分相似,用单独一个表来处理它们会更有效率.员工与经理成为一个扩充员工表的"子类型". 你必须决定如何处理子类型之间的差异.如果不同的子类型需要相同的数据,只是解释不同的话,你可以对所有子类型使用同一些列.另一个方法就是建立专门针对子类型的列.每种方法各有其优缺点. 对列进行再利用时,需要在表中增加另一列来指明特定行中的子类型.这

关于java boolean类型if判断,一个小问题。刚注册实在没有c币,只能说声谢谢了。

问题描述 关于java boolean类型if判断,一个小问题.刚注册实在没有c币,只能说声谢谢了. 截的图里面_if(bool)_里的bool什么意思?是_bool=true_吗? 为什么我把_bool_换成_bool=true_ 编译后输入_40_会把_-1_也打印出来? 先谢好心人解答了,刚学java,好多都不懂 解决方案 这个方法表示如果n与a数组里面的所有值都不相等的话,那么bool变量的值就一直是true,就输出-1: 如: n输入的是5,那么a与1,4,6,9,40都不相等,所以为

java里的多态理解的模模糊糊的,到底什么是多态?多态和类是什么关系?和对象呢?

问题描述 java里的多态理解的模模糊糊的,到底什么是多态?多态和类是什么关系?和对象呢? java里的多态理解的模模糊糊的,到底什么是多态?多态和类是什么关系?和对象呢? 解决方案 多态,顾名思义就是一种概念,多种形态. 在Java中,泛型.继承和复写方法.函数重载都体现了多态. 具体你可以看维基百科上对应的词条. 解决方案二: 你只要记住 1.同一类中,方法的**重载**是多态的体现. 2.在不同的类中(继承),方法的**重写**也是多态的体现 解决方案三: 需要搞清楚面向对象的三大特征,封

java基本类型的包装集作为参数传递的是值而不是引用

问题描述 java基本类型的包装集作为参数传递的是值而不是引用 java基本类型的包装集作为参数传递的是值而不是引用,可以解释下,为什么是这样的吗?结果我已经知道了 解决方案 说到值传递,无非就是和引用传递以及地址传递相对来说的. 引用传递,行参记录的是实参的地址.值传递,行参是实参的copy. 对于java来说,行参存的就是实参内部的值(虽然这个值是对象的地址,但不是实参的地址) 解决方案二: 这个integer对象有其特殊性,在该类中是final类型.所以并不能改变 解决方案三: 因为基本类