AJPFX关于多态的应用
要求设计一个方法,要求此方法可以接受A类的任意子类对象,并调用方法,此时,如果不使用对象多态性,那代码肯定会类似如下
- class A{ // 定义类A
- public void Run1(){ // 定义Run1()方法
- System.out.println("A类----Run1方法") ;
- }
- public void Run2(){
- Run1() ; // 调用父类的Run1()方法
- }
- }
- class B extends A{
- public void Run1(){ // 覆写父类中的Run1方法
- System.out.println("B类----Run1方法") ;
- }
- public void Run3(){ // B类特有的方法
- System.out.println("B类----Run3方法") ;
- }
- }
- class C extends A{
- public void Run1(){ // 覆写父类中的Run1方法
- System.out.println("C类----Run1方法") ;
- }
- public void Run5(){ // C类特有的方法
- System.out.println("C类----Run5方法") ;
- }
- }
- public class Demo6{
- public static void main(String asrgs[]){
- Run(new B()) ; // 传递B类的实例 B b = new B();
- Run(new C()) ; // 传递C类的实例 C c = new C();
- }
- public static void Run(B b){
- b.Run1() ; // 调用覆写父类中的Run1()方法
- }
- public static void Run(C c){
- c.Run1() ; // 调用覆写父类中的Run1()方法
- }
- }
复制代码
以代码虽然实现要求,但可以发现:如果按照如上方式完成程序,这就相当于产生了一个A类的子类时,Run()方法就要重载一次,则每一次扩充子类都要修改类本身,这样肯定不太好,那么如果使用对象多态性完成呢?具体代码如下
- class A{ // 定义类A
- public void Run1(){ // 定义Run1()方法
- System.out.println("A类----Run1方法") ;
- }
- public void Run2(){
- Run1() ; // 调用父类的Run1()方法
- }
- }
- class B extends A{
- public void Run1(){ // 覆写父类中的Run1方法
- System.out.println("B类----Run1方法") ;
- }
- public void Run3(){ // B类特有的方法
- System.out.println("B类----Run3方法") ;
- }
- }
- class C extends A{
- public void Run1(){ // 覆写父类中的Run1方法
- System.out.println("C类----Run1方法") ;
- }
- public void Run5(){ // C类特有的方法
- System.out.println("C类----Run5方法") ;
- }
- }
- public class Demo6{
- public static void main(String asrgs[]){
- Run(new B()) ; // 传递B类的实例,产生向上转移
- Run(new C()) ; // 传递C类的实例,产生向上转移
- }
- //接收父类对象
- public static void Run(A a){//相当于 A a = new B() & A a = new C()
- a.Run1() ; // 调用覆写父类中的Run1()方法
- }
- }
复制代码
上代码中在Run()方法中使用了对象的多态性,所以可以接收任何子类的对象,这样无论子类如何增加,Run()方法都不用做任何的改变,因为发生了对象的向上转型关系后,调用的方法一定是被子类覆写过的方法。
AJPFX关于多态的应用的更多相关文章
- AJPFX关于多态中的动态绑定和静态绑定的总结
在多态中:成员变量和静态方法编译和运行都看左边:成员方法编译看左边,运行看右边,这是为什么:在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定.另一种就是动态绑定,亦称为后期绑定1.静态绑定 ...
- AJPFX关于面向对象之封装,继承,多态 (上)
Java是一种面向对象的语言,这是大家都知道的,他与那些像c语言等面向过程语言不同的是它本身所具有的面向对象的特性--封装,继承,多态,这也就是传说中的面向对象三大特性 一:从类和对象开始说起: Oo ...
- AJPFX关于面向对象之封装,继承,多态 (下)
(3)private: 对于对于成员来说:只能在该成员隶属于的类中访问. 对于类来说:类不可以声明为private. 4)protected: 对于对于成员来说:相同包中的类可以访问(包访问权限):基 ...
- Java中的多态
1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal {public abstract void Say();} 子类: public class ...
- C# 工厂模式+虚方法(接口、抽象方法)实现多态
面向对象语言的三大特征之一就是多态,听起来多态比较抽象,简而言之就是同一行为针对不同对象得到不同的结果,同一对象,在不同的环境下得到不同的状态. 实例说明: 业务需求:实现一个打开文件的控制台程序的d ...
- C#非常重要基础之多态
前几天看了一位同志的博客,写的是关于他自己去支付宝面试的经历.过程大体是这样的:问答的时候,前面部分,作者都应答如流,说起自己经验如何之丰富,最后面试官问了作者一个问题:请简述多态的概念和作用.结果这 ...
- C++多态详解
多态是面向对象的程序设计的关键技术.多态:调用同一个函数名,可以根据需要但实现不同的功能.多态体现在两个方面,我们以前学过的编译时的多态性(函数重载)和现在我们这一章将要学习的运行时的多态性(虚函数) ...
- 【那些年关于java多态应用】
1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal { public abstract void Say();} 子类: public class ...
- JAVA多态
多态是指当系统A访问系统B的服务时,系统B可以通过多种方式来提供服务,而这一切对系统A是透明的.比如动物园的饲养员能够给各种各样的动物喂食.下图显示了饲养员Feeder,食物Food和动物Animal ...
随机推荐
- Saltstack运行cmd.run重新启动tomcat后出现日志乱码(15)
Saltstack使用的cmd.run调用的是核心模块cmdmod.py,以下我们来看一下cmdmod.py模块的源代码: cat /usr/lib/python2.6/site-packages/s ...
- 数据结构-二叉树的遍历(类C语言描写叙述)
遍历概念 所谓遍历(Traversal)是指沿着某条搜索路线.依次对树中每一个结点均做一次且仅做一次訪问.訪问结点所做的操作依赖于详细的应用问题. 遍历是二叉树上最重要的运算之中的一个,是二叉 ...
- Nginx系列三 内存池的设计
Nginx的高性能的是用非常多细节来保证,epoll下的多路io异步通知.阶段细分化的异步事件驱动,那么在内存管理这一块也是用了非常大心血.上一篇我们讲到了slab分配器,我们能够能够看到那是对共享内 ...
- JavaScript操作符(关系操作符、相等操作符和条件操作符)
关系操作符用于对两个值进行比较,返回一个布尔值.关系操作符包括大于(>),小于(<),大于等于(>=),小于等于(<=).当关系操作符用于非数值时,也要先进行数值的转换.如 v ...
- Java小白手记2:一些名词解释
看到<Java 征途:行者的地图> ,这是一篇有关java学习路径文章.对我等Java小白有指引作用.里面提到了一些基本的名词术语,有些我知道,有些不知道,再补上一些自己曾觉得模糊的,记录 ...
- UESTC 982质因子分解
读入一个自然数,将nn分解为质因子连乘的形式输出. Input 有多组测试数据.输入的第一行是整数TT(0<T≤10000),表示测试数据的组数.每一组测试数据只有一行,包含待分解的自然数nn. ...
- Facebook Flux 分析
首先是actions使用了Dispatcher来定义分发事件, Store在Dispatcher里注册自己的ActionType,收到对应的Action后修改Store内部的结构 Store emit ...
- YTU 2838: 改错题AB-装置连接
2838: 改错题AB-装置连接 时间限制: 1 Sec 内存限制: 128 MB 提交: 81 解决: 49 题目描述 注:本题只需要提交标记为修改部分之间的代码,请按照C++方式提交. 有AB ...
- YTU 1007: Redraiment猜想
1007: Redraiment猜想 时间限制: 1000 Sec 内存限制: 10 MB 提交: 83 解决: 23 题目描述 redraiment在家极度无聊,于是找了张纸开始统计素数的个数. ...
- jquery a
<!DOCTYPE html><html><head><script src="//ajax.googleapis.com/ajax/libs/jq ...