重新认识面向对象之多态(二)

x33g5p2x  于2022-05-28 转载在 其他  
字(1.9k)|赞(0)|评价(0)|浏览(377)

定义

多态是面向对象程序设计的核心概念之一,是体现“一样的语句,不一样的执行效果”的重要手段。

多态一词来源于希腊语,从字面理解就是多种形态或多种形式,可以理解"一种接口,多种实现"。实现了多态机制的程序,可以使用同一个名字完成不同的功能。

多态性有静态多态性和动态多态性两种,静态多态性是指调用同名函数,根据参数的不同而调用不同的同名函数。动态多态性是指不同对象调用同名函数时,由于对象不同而调用不同的同名函数。

所以不论是静态多态还是动态多态,多态性肯定是调用同名函数。

实现动态多态必须满足一下两个条件。
1.必须声明虚函数。

2.通过基类类型的引用或者指针调用虚函数。

也可以这么说:

需要有继承关系

子类重写父类的方法

父类的引用指向子类的实现

代码实现 

抽象父类

  1. /**
  2. * 运算类
  3. *
  4. * @author Promsing(张有博)
  5. * @version 1.0.0
  6. * @since 2022/5/27 - 17:57
  7. */
  8. public abstract class Operation {
  9. private double numberA;
  10. private double numberb;
  11. public double getNumberA() {
  12. return numberA;
  13. }
  14. public void setNumberA(double numberA) {
  15. this.numberA = numberA;
  16. }
  17. public double getNumberb() {
  18. return numberb;
  19. }
  20. public void setNumberb(double numberb) {
  21. this.numberb = numberb;
  22. }
  23. public abstract double getResult();
  24. }

 子类

  1. /**
  2. * 加法
  3. *
  4. * @author Promsing(张有博)
  5. * @version 1.0.0
  6. * @since 2022/5/27 - 17:59
  7. */
  8. public class OperationAdd extends Operation{
  9. //子类重写父类的方法
  10. @Override
  11. public double getResult() {
  12. return super.getNumberA()+super.getNumberb();
  13. }
  14. }
  15. /**
  16. * 减法
  17. *
  18. * @author Promsing(张有博)
  19. * @version 1.0.0
  20. * @since 2022/5/27 - 17:59
  21. */
  22. public class OperationSub extends Operation{
  23. //子类重写父类的方法
  24. @Override
  25. public double getResult() {
  26. return super.getNumberA()-super.getNumberb();
  27. }
  28. }

简单工厂,实例化对象

  1. /**
  2. * 简单工厂
  3. *
  4. * @author Promsing(张有博)
  5. * @version 1.0.0
  6. * @since 2022/5/27 - 18:01
  7. */
  8. public class OperationFactory {
  9. /**
  10. * 创建operation的对象
  11. * @param operate
  12. * @return
  13. */
  14. public static Operation cerateOperate(String operate){
  15. Operation oper=null;
  16. switch (operate){
  17. case "+":
  18. oper=new OperationAdd();
  19. break;
  20. case "-":
  21. oper=new OperationSub();
  22. break;
  23. }
  24. return oper;
  25. }
  26. }

Main方法,重点在这里

  1. public class Main {
  2. public static void main(String[] args) {
  3. Operation operation;
  4. //1.父类的引用指向子类的实现
  5. operation=OperationFactory.cerateOperate("+");//这里通过简单工厂创建对象
  6. operation.setNumberA(5);
  7. operation.setNumberb(15);
  8. //2.调用父类方法,其实具体的实现会走子类的方法
  9. double result = operation.getResult();
  10. System.out.println(result);
  11. }
  12. }

多态可以简单地理解为同一条函数调用语句能调用不同的函数体;或者说,对不同对象发送同样的消息,使得不同对象有各自不同的行为

面向对象程序设计语言有封装、继承和多态3种机制,合理有效的运用这3种机制可以提高程序的可读性、可扩充性和可重用性。

开发者涨薪指南

48位大咖的思考法则、工作方式、逻辑体系

相关文章