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

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

定义

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

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

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

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

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

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

也可以这么说:

需要有继承关系

子类重写父类的方法

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

代码实现 

抽象父类

/**
 * 运算类
 *
 * @author Promsing(张有博)
 * @version 1.0.0
 * @since 2022/5/27 - 17:57
 */
public abstract class Operation {

    private double numberA;
    private double numberb;

    public double getNumberA() {
        return numberA;
    }

    public void setNumberA(double numberA) {
        this.numberA = numberA;
    }

    public double getNumberb() {
        return numberb;
    }

    public void setNumberb(double numberb) {
        this.numberb = numberb;
    }

    public abstract double getResult();
}

 子类

/**
 * 加法
 *
 * @author Promsing(张有博)
 * @version 1.0.0
 * @since 2022/5/27 - 17:59
 */
public class OperationAdd extends Operation{

    //子类重写父类的方法
    @Override
    public double getResult() {
        return super.getNumberA()+super.getNumberb();
    }
}

/**
 * 减法
 *
 * @author Promsing(张有博)
 * @version 1.0.0
 * @since 2022/5/27 - 17:59
 */
public class OperationSub extends Operation{

    //子类重写父类的方法
    @Override
    public double getResult() {
        return super.getNumberA()-super.getNumberb();
    }
}

简单工厂,实例化对象

/**
 * 简单工厂
 *
 * @author Promsing(张有博)
 * @version 1.0.0
 * @since 2022/5/27 - 18:01
 */
public class OperationFactory {

    /**
     * 创建operation的对象
     * @param operate
     * @return
     */
    public static Operation cerateOperate(String operate){
        Operation oper=null;
        switch (operate){
            case "+":
                oper=new OperationAdd();
                break;
            case "-":
                oper=new OperationSub();
                break;
        }
        return oper;
    }

}

Main方法,重点在这里

public class Main {

    public static void main(String[] args) {
         Operation operation;
         //1.父类的引用指向子类的实现
         operation=OperationFactory.cerateOperate("+");//这里通过简单工厂创建对象
         operation.setNumberA(5);
         operation.setNumberb(15);

         //2.调用父类方法,其实具体的实现会走子类的方法
         double result = operation.getResult();
         System.out.println(result);
    }

}

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

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

开发者涨薪指南

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

相关文章