文章目录

  • 一、面向对象 3 要素
  • 二、多态 ( 提升程序扩展性 )
  • 三、不使用多态示例
  • 四、使用多态示例
  • 总结

一、面向对象 3 要素


面向对象 333 要素 :

封装 : 解决 安全性 问题 ; 通过 private , protected , public 修饰方法 , 变量 , 以保证代码安全性 ;

继承 : 解决 代码重用 问题 ; 子类继承父类 ,

多态 : 解决 程序扩展 问题 ;

二、多态 ( 提升程序扩展性 )


多态有 333 种表现 :

① 子类 重写 父类方法 ;

② 相同方法名 不同参数 的 方法 重载 ;

③ 父类引用 指向 子类对象 ;

面向对象编程时 , 建议 面向接口 编程 ;

如果不使用多态 , 如果 添加新的类 时 , 就需要 修改业务逻辑 , 明显 违反了开闭原则 ;

面向对象中 , 多态发生的条件 :

  • 子类 继承 ( 实现 ) 父类 ;
  • 父类引用 指向 子类对象 ;
  • 子类 重写 父类方法 ;

使用多态后 , JVM 在运行阶段 , 才知道要执行哪个类的方法 ;

三、不使用多态示例


业务场景 : 飞行器飞行 , 飞行器有 直升机 和 运输机 , 每个飞行器都有起飞和降落方法 ;

直升机类 :

public class Helicopter {public void takeOff() {System.out.println("直升飞机 起飞");}public void land() {System.out.println("直升飞机 降落");}
}

运输机类 :

public class TransportPlane {public void takeOff() {System.out.println("运输机 起飞");}public void land() {System.out.println("运输机 降落");}
}

客户端 : 分别为 直升机 Helicopter 和 运输机 TransportPlane 各自定义 111 个方法 ;

public class Client {public static void main(String[] args) {Client client = new Client();client.doFly();client.doFly2();}private void doFly() {Helicopter helicopter = new Helicopter();helicopter.takeOff();System.out.println("飞行");helicopter.land();}private void doFly2() {TransportPlane transportPlane = new TransportPlane();transportPlane.takeOff();System.out.println("飞行");transportPlane.land();}
}

运行结果 :

上述示例中 , 如果要添加新的飞行器 , 战斗机 , 就要定义新的 客户端 Client 方法 , 修改客户端的业务逻辑 ;

这显然违背了 面向对象 777 大设计原则 中的 " 开闭原则 " ;

增加的新的战斗机类 :

public class Fighter {public void takeOff() {System.out.println("战斗机 起飞");}public void land() {System.out.println("战斗机 降落");}
}

客户端修改后的结果 :

public class Client {public static void main(String[] args) {Client client = new Client();client.doFly();client.doFly2();client.doFly3();}private void doFly() {Helicopter helicopter = new Helicopter();helicopter.takeOff();System.out.println("飞行");helicopter.land();}private void doFly2() {TransportPlane transportPlane = new TransportPlane();transportPlane.takeOff();System.out.println("飞行");transportPlane.land();}private void doFly3() {Fighter fighter = new Fighter();fighter.takeOff();System.out.println("飞行");fighter.land();}
}

执行结果 :

四、使用多态示例


飞行器接口 :

public interface Aircraft {public void takeOff();public void land();
}

直升飞机 :

public class Helicopter implements Aircraft {@Overridepublic void takeOff() {System.out.println("直升飞机 起飞");}@Overridepublic void land() {System.out.println("直升飞机 降落");}
}

运输机 :

public class TransportPlane implements Aircraft {@Overridepublic void takeOff() {System.out.println("运输机 起飞");}@Overridepublic void land() {System.out.println("运输机 降落");}
}

客户端类 :

public class Client {public static void main(String[] args) {Client client = new Client();Aircraft aircraft1 = new Helicopter();Aircraft aircraft2 = new TransportPlane();client.doFly(aircraft1);client.doFly(aircraft2);}private void doFly(Aircraft aircraft) {aircraft.takeOff();System.out.println("飞行");aircraft.land();}
}

执行结果 :

添加战斗机类 , Client 中的相关方法不用修改 ;

添加的战斗机类 :

public class Fighter implements Aircraft {@Overridepublic void takeOff() {System.out.println("战斗机 起飞");}@Overridepublic void land() {System.out.println("战斗机 降落");}
}

修改后的客户端类 :

public class Client {public static void main(String[] args) {Client client = new Client();Aircraft aircraft1 = new Helicopter();Aircraft aircraft2 = new TransportPlane();Aircraft aircraft3 = new Fighter();client.doFly(aircraft1);client.doFly(aircraft2);client.doFly(aircraft3);}private void doFly(Aircraft aircraft) {aircraft.takeOff();System.out.println("飞行");aircraft.land();}
}

执行结果 :

总结


多态作用 : 提升程序扩展性 ;

多态 333 种表现 : ① 子类 重写 父类方法 ; ② 相同方法名 不同参数 的 方法 重载 ; ③ 父类引用 指向 子类对象 ;

多态发生 333 条件 : ① 子类 继承 ( 实现 ) 父类 ; ② 父类引用 指向 子类对象 ; ③ 子类 重写 父类方法 ;

【设计模式】面向对象 - 多态 ( 面向对象 3 要素 | 多态 提升 程序扩展性 | 多态示例 )相关推荐

  1. 笔记②:牛客校招冲刺集训营---C++工程师(面向对象(友元、运算符重载、继承、多态) -- 内存管理 -- 名称空间、模板(类模板/函数模板) -- STL)

    0618 C++工程师 第5章 高频考点与真题精讲 5.1 指针 & 5.2 函数 5.3 面向对象(和5.4.5.5共三次直播课) 5.3.1 - 5.3.11 5.3.12-14 友元 友 ...

  2. Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...

    Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数) https://mubu.com/doc/1AqL_M0IbW 继承之钻石继承 多态 封装 几个装饰 ...

  3. Java 面向对象编程的三大特性——封装、继承、多态

    一.类和对象 1. 首先,什么是对象呢? 对象简单的来说就是一个实物,比如一部 iPhone X 手机,它就是对象.它的屏幕.内存等就是它的属性. 手机能够打电话,发短信,这个功能就是它的方法. 2. ...

  4. 面向对象的三大特性:封装、继承、多态

    面向对象的三大特性 面向对象的三大特性:封装.继承.多态 封装 封装,成员变量的封装,保证了数据的安全性.封装的好处:过滤了不合理的值.屏蔽内部的赋值过程.让外界不必关注内部的细节 Set方法 1.  ...

  5. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

    介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...

  6. 7-1 sdut-oop-7 答答租车系统(类的继承与多态 面向对象综合练习) (30 分)

    7-1 sdut-oop-7 答答租车系统(类的继承与多态 面向对象综合练习) (30 分) 各位面向对象的小伙伴们,在学习了面向对象的核心概念--类的封装.继承.多态之后,答答租车系统开始营运了. ...

  7. java面向对象:三大特性:封装,继承,多态

    -----------------------------------面向对象:三大特性:封装,继承,多态 ----------------------------------- 1.什么是类?什么是 ...

  8. 面向对象的3 大特性封装、继承、多态。咱们今天用代码的形式来解释一下这名声赫赫的3大特性。...

    声明:本文章是为一个朋友而写的,昨天朋友遇见了问题,今天自己思考后,发现问题的本质就是面向对象的3大特性,所以才有了本文-- 只要是有过学习高级编程语言的同学应该都知道面向对象这个思想(所谓的高级语言 ...

  9. 八、面向对象的三大特性:封装,继承,多态

    目录 1.封装 2.继承 2.1概述与应用 2.2不可继承性 2.3权限测试 2.4继承-重写(重点,难点) 2.5super与this的使用 3.多态 3.1多态核心 3.2多态直接引用 3.3多态 ...

最新文章

  1. 移动端touchstart、touchmove事件的基本使用
  2. dede 两种幻灯代码
  3. 搜索的php mysql代码生成器_四款强大的PHP代码生成器
  4. RHEL5 Linux下Oracle 10 Client的安装明细
  5. 计算机毕业设计APP项目技术开发文档
  6. python 下载安装 教程
  7. 个人简历表格 个人简历word百度云 完整个人简历样本
  8. 创新产业发展战略:大前研一
  9. cmd查看电脑ip配置
  10. 不知道华为手机识别图片文字怎么弄?2个识别方法收好了
  11. Replication Failed to register VRMS. Operation ID: bef61197-acf3-46ac-bffd-d457
  12. 第一次在Vue项目中播放m3u8格式视频遇到的问题和解决方法
  13. 平台注册加入微信验证码机制。
  14. 为什么现在java这么难找,现在java工作难找吗
  15. 激光雷达和毫米波雷达工作原理对比
  16. 什么设备升级android9,三星升级Android 9 Pie设备公布:S9明年1月上线
  17. Vue 自适应高度表格的实现方法
  18. juniper官网相关网址
  19. Windows各版本安装包分享
  20. 新学问教育php,神墨教师的教育梦——让梦想与爱同行

热门文章

  1. js 区分 safari chrome iso
  2. 【简报】创建线框结构的PDF格式草图表
  3. 802.1x认证协议的应用
  4. SQL必知必会——插入数据(十五)
  5. 用NiceTool在微信浏览器中下载APP
  6. Linux课程---7、shell技巧(获取帮助命令)
  7. SQL Server移除事务日志后sys.master_files依然存在记录问题
  8. Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范与推荐标准
  9. C++ 画星号图形——空心矩形(核心代码记录)
  10. 团队项目的分工及绩效评估方法