Java特性之多态详解
来源:互联网 发布:js object 添加对象 编辑:程序博客网 时间:2024/06/05 18:47
四大特性:抽象、封装、继承、多态。
最近在论坛上看到一个帖子、激烈的讨论多态相关、此文为本人参照相关技术论坛和技术博客的相关观点总结、也包涵博主自己对多态的相关理解、如有错误之处请加以指正、博主定会修正、以免误导他人。如转载此文、请注明出处。
本人观点:java中多态:体现方式为java重写、而java中重载只在编译期体现多态、程序运行之后重载和多态无关、此观点只代表作者在此时点所认知观点 2016年12月19日19:50:58 追記
什么是多态(polymorphism)
①大多较专业的解释为:多态指允许不同的类的对象对同一消息(方法调用)做出响应。
意指相同的消息给予不同的对象会引发不同的动作。 // 2016/12/13 19:59 Meta 追記
多态是指同样的消息被不同类型的对象接收时导致不同的行为。所谓的消息是指对类的成员函数的调用。 // 《c++程序设计语言 第四版》第307页
②个人观点总结(java):是指子类重新定义(重写)父类的抽象方法(abstract、virtual(c++的虚函数))。当子类重新定义了父类的抽象方法后,父类根据赋给它的不同的子类,动态调用属于子类的该方法。
③通俗的解释:多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。
※ 在JAVA编程思想中多态章节中并没有给出具体定义、但是书中在多态章节再次着重讲解了重写、以及构造方法相关方面。
两种多态形式
编译时多态 静态绑定 程序运行前发生的事件 重载
运行时多态 动态绑定 程序运行时发生的事件 重写
多态的作用
消除类型之间的耦合关系 // <<java编程思想>>第148页 (这让我联想到了Spring)
静态多态(dynamic polymorphism)
模板允许将不同的特殊行为和单个泛化记号相关联,由于这种关联处理于编译期而非运行期,因此被称为“静态”。
多数来自于C++程序员的解释、作为一个java程序员、这也是为什么前段时间所纠结的、为何重载会提现多态、于是找到了一本《c++程序设计语言 第四版》参看
1、编译时多态/特设多态/非参数化多态(Ad-hoc polymorphism)
・函数重载(Function Overloading)
・运算符重载(Operator Overloading)
・带变量的宏多态(macro polymorphism)
2、参数化多态(Parametric polymorphism):把类型作为参数的多态。在面向对象程序设计中,这被称作泛型编程。
总结(java):
重载,是指允许存在多个同名方法,而这些方法的参数不同。重载的实现是:编译器根据方法不同的参数表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。它们的调用地址在编译期就绑定了。
动态多态(dynamic polymorphism)
通过类继承机制和虚函数机制生效于运行期。可以优雅地处理异质对象集合,只要其共同的基类定义了虚函数的接口。也被称为子类型多态(Subtype polymorphism)或包含多态(inclusion polymorphism)。在面向对象程序设计中,这被直接称为多态。
多态存在的四个必要条件(Java):
1、要有继承。
2、要有方法的重写。
3、父类引用指向子类对象。
4、要有父类变量调用重写方法。
简单实例:
package com.ibm.dietime1943.test;public class Polymorphism {public static void main(String[] args) {Choose ce = new Choose();ce.choose(new ColorPrinter()); // 多态调用ce.choose(new MonochromePrinter()); // 多态调用}}abstract class Printer{abstract void print();}class ColorPrinter extends Printer{@Overridevoid print() {System.out.println("print color picture.");}}class MonochromePrinter extends Printer{@Overridevoid print() {System.out.println("print monochrome picture.");}}class Choose{public void choose(Printer p){p.print();}}
- Java特性之多态详解
- java中三大特性之多态详解
- java特性之多态
- 代码详解のJava面向对象特性之多态
- JAVA四大特性之多态
- java的三大特性之多态
- java的三大特性之多态
- java三大特性之多态
- Java三大特性之多态
- Java三大特性之多态
- 理解Java三大特性之多态
- java 三大特性之多态
- java三大特性之多态
- java三大特性之多态
- Java三大特性之多态
- Java三大特性之多态
- Java面向对象四大特性之多态
- java的三大特性之多态
- 程序员如何告别肩颈疲劳
- POSIX 标准
- 微信多开App操作流程
- matlab 高阶(一) —— assignin与evalin
- android调用音乐播放器,三种方法
- Java特性之多态详解
- 蓝牙之二十三-beacon
- Mybatis 学习
- [已解决]nginx: [emerg] invalid number of arguments in "root" directive in /etc/nginx/nginx.conf:45
- 4 编 码
- C++简单计算器实现(四则运算加括号)
- 【React Native开发】React Native进行签名打包成Apk(5)
- 贪心算法 汽车加油问题
- 集成百度地图sdk小白操作