多态是面向对象程序设计的核心概念之一,是体现“一样的语句,不一样的执行效果”的重要手段。
多态一词来源于希腊语,从字面理解就是多种形态或多种形式,可以理解"一种接口,多种实现"。实现了多态机制的程序,可以使用同一个名字完成不同的功能。
多态性有静态多态性和动态多态性两种,静态多态性是指调用同名函数,根据参数的不同而调用不同的同名函数。动态多态性是指不同对象调用同名函数时,由于对象不同而调用不同的同名函数。
所以不论是静态多态还是动态多态,多态性肯定是调用同名函数。
实现动态多态必须满足一下两个条件。
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;
}
}
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位大咖的思考法则、工作方式、逻辑体系
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/promsing/article/details/125008396
内容来源于网络,如有侵权,请联系作者删除!