Java中的多态用法实例分析
来源:才华咖 本文已影响2.34W人
来源:才华咖 本文已影响2.34W人
多态分两种:
(1) 编译时多态(设计时多态):方法重载。
(2) 运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态)
运行时多态存在的三个必要条件:
一、要有继承(包括接口的实现);
二、要有重写;
三、父类引用指向子类对象。
详细解释:
运行时多态的解释:a.运行时多态是指程序中定义的引用变量所指向的具体类型和b.通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定.
1.程序序中定义的引用变量所指向的具体类型不确定(即一个引用变量倒底会指向哪个类的实例对象) 。
例子 :
driver 类中 drive 方法 (Vehicle类 vehicle){}
e( new car() )
e( new bus() )
其中vehicle 变量无法确定具体使用哪个子类实例。
1.通过该引用变量发出的方法调用在编程时并不确定(该引用变量发出的方法调用到底是哪个类中实现的方法) 。
例子 : 厨师,园丁,理发师的Cut 方法调用().
多态的'好处:
1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
实际运用:
结合配置文件的使用,联系Spring框架,利用反射,动态的调用类,同时不用修改源代码,直接添加新类和修改配置文件,不需要重启服务器便可以扩展程序。
小结:
使用父类类型的引用指向子类的对象,该引用调用的师父类中定义的方法和变量,变量不能被重写(覆盖);如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;
注意特殊情况,如果该父类引用所调用的方法参数列表未定义,就调用该父类的父类中查找,如果还没找到就强制向上类型转换参数列表中的参数类型,具体优先级高到低依次如下:
(O)、(O)、((super)O)、((super)O)。
JAVA的动态代理分析
JAVA认证基础知识:Java文件解压缩示例
Java中Websocket使用实例解析
Java内部类详解及实例分析
Java中的== 和equals()方法详解与实例教程
java使用动态代理来实现AOP
Java动态代理实现AOP的方法
JavaScript匿名函数实例分析
Java认证辅导:Java实现二叉树遍历算法
java之this关键字用法事例解析
关于Java中对象的销毁方法分析
JAVA认证开源技术:关于Java的对象equals方法
2017最新javascript中AJAX用法
关于java 四舍五入使java保留2位小数示例讲解
经典Java面试题之Java中Char类型的运算
Java语言的多态情况
Java基本语法—java标识符
Javascript数组与字典用法分析方法
举例讲解Java中的多线程范文欣赏
java多线程同步块实例讲解素材
Java入门教程:如何使用一个Java
万恶的function在javascript中的运用实例分析
Java多线程的定义状态和属性
Javascript函数的定义和用法分析
java命令行引用jar包的方法
面试自我介绍实例分析 最实用的自我介绍技巧
如何使用Java实现AC自动机全文检索实例
非常实用的面试套路分析方法
Java面试实例用最有效率的方法计算2乘以8
案例分析批复的写法
Java中静态变量的适用场景
JAVA多线程并发下的单例模式应用
在Java中执行JavaScript代码
Java中ArrayList类的使用用法
javascript解析json实例
在JavaScript中操作数组之map()方法的使用示例
Java 中静态变量和实例变量区别
Java多线程的用法介绍
Java实现多线程的方法
JQuery中serialize()用法实例分析