要求设计一个方法,要求此方法可以接受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()方法都不用做任何的改变,因为发生了对象的向上转型关系后,调用的方法一定是被子类覆写过的方法。

转载于:https://blog.51cto.com/14314113/2390706

AJPFX关于多态的应用相关推荐

  1. 重拳出击之《JVM》面试官版 (初哥勿看)

    <fonr color = black>JVM发展史,虚拟机发展史模块 java技术体系包括了几个组成部分? javaME.SE.EE分别是什么? 都说JDK7版本是第一个里程碑版本,为什 ...

  2. Python Day26:多态、封装、内置函数:__str__、__del__、反射(反省)、动态导入模块...

    ## 多态 ```python OOP中标准解释:多个不同类型对象,可以响应同一个方法,并产生不同结果,即为多态 多态好处:只要知道基类使用方法即可,不需要关心具体哪一个类的对象实现的,以不变应万变, ...

  3. Go 学习笔记(36)— 基于Go方法的面向对象(封装、继承、多态)

    Go 面向对象编程的三大特性:封装.继承和多态. 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式 继承:使得子类具有父类的属性和方法或者重新定义.追加属性和方法等 多态:不同对象中同种行为的不 ...

  4. C#关于面对象多态例子

    //主的喂狗 class Program     {         static void Main(string[] args)         {             //我们来模拟一个主人 ...

  5. java为什么序列化不一致_java – 为什么Jackson多态序列化在列表中不起作用?

    杰克逊正在做一些真正奇怪的事情,我找不到任何解释.我正在进行多态序列化,当一个对象独立时它可以很好地工作.但是,如果将相同的对象放入列表并对列表进行序列化,则会删除类型信息. 它丢失类型信息的事实将导 ...

  6. 【C++】多态(早期绑定、后期绑定)、抽象类(纯虚函数)、虚析构函数

    我们都知道面向对象编程的三大特征是封装.继承.多态,今天我们就来说一下其中之一的多态. 概念: 多态: 多态字面意思就是多种形态,C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同 ...

  7. Go 分布式学习利器(13)-- Go语言的多态

    文章目录 1. 基本的多态实现 2. 空接口与断言 3. Go接口的最佳实践 1. 基本的多态实现 我们知道C++中实现多态是通过虚函数表 和 继承来 实现的. 类似如下代码: class Progr ...

  8. (1)访问控制 (2)final关键字 (3)对象创建的过程 (4)多态

    1.访问控制(笔试题) 1.1 常用的访问控制符 public - 公有的 protected - 保护的 啥也不写 - 默认的 private - 私有的 1.2 访问控制符的比较 访问控制符 访问 ...

  9. 多态---父指针指向子类对象(父类引用指向子类对象)

    我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一.封装 封装就是对类中的一些字段,方法进行保护,不被外界 ...

最新文章

  1. C语言经典例96-计算字符串中子串出现的次数
  2. 深度解析K-L变换 及其 在特征识别中的应用
  3. 解题报告+优化——试题 基础练习 矩形面积交——16行代码AC
  4. 解决cc1plus.exe: out of memory allocating bytes
  5. android icon命名规则,安卓手机的APP图标尺寸规范和图标命名规范
  6. 《硝烟中的Scrum和XP》书摘(1)
  7. Golang原生sql操作Mysql数据库增删改查
  8. Maven 3 常见错误
  9. 微博每日数十亿级业务下的计数器如何扩展Redis?
  10. 第十章第二节 阿基米德原理
  11. PHP高并发高负载下的3种实战场景解决方法
  12. html站点地图怎么做,网站地图(站点地图)详细介绍、以及如何制作详解
  13. php学籍信息管理系统心得_php学籍管理系统,源码免费分享
  14. JAVA 面试 知识点整理
  15. HtmlHelper用法大全(下)
  16. C语言:strtok()的用法。
  17. 入职阿里巴巴的正确姿势
  18. ELK学习--Kibana 5.6.5 安装
  19. EC200 EC600 EC20接入工业互联网云平台
  20. python基本输入输出函数有_python基本输入输出函数与变量类型

热门文章

  1. java deep clone util_Java Clone深拷贝与浅拷贝的两种实现方法
  2. java wav 切割_WAV音频定长分段切取
  3. ubuntu 符号连接的层数过多_Linux符号连接的层数过多解决
  4. ssd网络结构_封藏的SSD(Single Shot MultiBox Detector)笔记
  5. 洛谷 P3469 [POI2008]BLO-Blockade (Tarjan,割点)
  6. 在VMware 14中安装Centos7
  7. 【题解】【洛谷 P1967】 货车运输
  8. JZOJ5944信标
  9. cortex m0启动代码详解
  10. 批量改变文件夹和子文件夹中图片格式的两种方法