| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java三大特性之多态 -> 正文阅读 |
|
[Java知识库]Java三大特性之多态 |
一、什么是多态 多态性是面向编程的一个重要特性之一,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。 面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,就是所说的多态性。 二、Java实现多态有3个必要条件:继承,重写,向上转型。 只有满足这三个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。 (1)继承:在多态中必须存在有继承关系的子类和父类。 (2)重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。 (3)向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能调用父类的方法,又可以调用子类的方法。 三、 多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实列而执行不同操作。比如打印机,既可以打印出彩色的文档,也可以打印黑白文档,也可以打印大小不同的照片。 多态性是对象多种表现形式的体现。 比如我们按下F1键这个动作: (1)如果当前在Flash界面下弹出的就是AS3的帮助文档; (2)如果当前在Word下弹出的就是word帮助; (3)在Windows下弹出的就是Windows帮助和支持。 同一个事件发生在不同的对象上会产生不同的结果。对于Java而言,它多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。 ? 四、多态的优点 1、消除类之间的耦合关系; 2、可替换性; 3、可扩充性; 4、接口性; 5、灵活性; 6、简化性; 五、多态的实现形式 在Java中有两种形式可以实现多态。继承和接口。 1、基于继承实现多态 基于继承得实现机制主要表现在父类和继承该父类得一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。 基于继承实现的多态可总结为:对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同的动作产生的行为也就不同。 如果父类是抽象类,那么子类必须要实现父类中所有的抽象方法,这样该父类所有的子类一定存在统一的对外接口,但其内部的具体实现可以各异。这样我们就可以使用顶层类提供的统一接口来处理该层次的方法。 2、基于接口实现多态 继承是通过重写父类的同一方法的几个不同子类来体现的,那么就可就是通过实现接口并覆盖接口中同一方法的几不同的类体现的。 在接口的多态中,指向接口的引用必须是指定这实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。 继承都是单继承,只能为一组相关的类提供一致的服务接口。但是接口可以是多继承多实现,它能够利用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的服务接口。所以它相对于继承来说有更好的灵活性。 结论:多态的前提是有一个父类,多个子类。所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:48:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |