java面向对象多态性,实现面向对象的多态性有哪几种方法
00-1010什么是多态代码实现多态理解?
00-1010定义:
多态性是指不同的子类在继承父类后分别重写覆盖父类的方法,即父类的同一个方法在继承的子类中表现出不同的形式。决定在运行时(而不是编译时)调用哪个重载成员函数的能力称为多态性。
特点:
(1)多态性是面向对象的重要特征。简单来说,“一个接口,多种实现”就是同一件事情的多种形式。
(2)多态是抽象的一种表现,抽象出一系列具体事物的共同点,然后通过这个抽象的东西与不同的具体事物对话。
(3)向不同类别的对象发送相同的消息会有不同的行为。
(4)多态性允许子类的对象作为父类的对象。父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。这里,引用和调用方法的代码是在编译之前决定的,引用所指向的对象可以在运行时动态绑定。
(5)多态性分为编译时多态性(函数参数个数或参数类型不同)和运行时多态性(虚函数和纯虚函数)。
角色:
(1)应用不必为每个派生类编写函数调用,只需要处理抽象基类即可。大大提高了程序的可重用性。//继承
(2)派生类的函数可以被基类的方法或引用变量调用,这叫向后兼容,可以提高可扩展性和可维护性。
(3)隐藏实现细节,使代码模块化(虚函数)。
00-1010操作等级:
/* * * @ author :[liyanqiang] * @ version 3360[v 1.0]* @ Class name 3360 Operation * @ Description 3360[Operation Class]* @ create TIME 3360[2022/5/7 20:04]* @ UPDATE user 3360[柳岩Qiang]* @ UPDATE TIME 3360[2022/5/27 20336004]* @ UPDATE REMARK 3360[本次修改说明]* .私人double _ numberBpublic double get _ numberA(){ return _ numberA;} public void set _ numberA(double _ numberA){ this。_ numberA=_ numberA} public double get _ numberB(){ return _ numberB;} public void set _ numberB(double _ numberB){ this。_ numberB=_ numberB}公共抽象double get result();}加法类:
/* * * @ author :[liyanqiang]* @ version 3360[v 1.0]* @ Class name 3360 Operation add * @ Description 3360[Addition Class]* @ create TIME 3360[2022/5/7 20:13]* @ UPDATE user 3360[柳岩Qiang]* @ UPDATE TIME 3360[2022/5/27 20:13]* @ UPDATE Remark 3360[本次修改说明]result=super . get _ numberA()super . get _ numberB();返回结果;}}减法类:
/* * * @ author :[liyanqiang]* @ version 3360[v 1.0]* @ Class name 3360 Operation sub * @ Description 3360[减法类]* @ create TIME 3360[2022/5/7 20:13]* @ UPDATE user 3360[柳岩Qiang]* @ UPDATE TIME 3360[2022/5/27 20336013]* @ UPDATE Remark 3360[本次修改说明]
double result = 0; result = super.get_numberA() - super.get_numberB(); return result; }}乘法类:
/** * @author : [LiuYanQiang] * @version : [v1.0] * @className : OperationMul * @description : [乘法类] * @createTime : [2022/5/27 20:15] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/27 20:15] * @updateRemark : [描述说明本次修改内容] */public class OperationMul extends Operation { @Override public double getResult() { double result = 0; result = super.get_numberA() * super.get_numberB(); return result; }}
除法类:
/** * @author : [LiuYanQiang] * @version : [v1.0] * @className : OperationDiv * @description : [除法类] * @createTime : [2022/5/27 20:16] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/27 20:16] * @updateRemark : [描述说明本次修改内容] */public class OperationDiv extends Operation { @Override public double getResult() { double result = 0; if (super.get_numberB() == 0) { System.out.println("除数不能为0"); } else { result = super.get_numberA() / super.get_numberB(); } return result; }}
简单工厂类:
/** * @author : [LiuYanQiang] * @version : [v1.0] * @className : OperationFactory * @description : [简单工厂类] * @createTime : [2022/5/27 20:16] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/27 20:16] * @updateRemark : [描述说明本次修改内容] */public class OperationFactory { public static Operation createOperation(String operate) { Operation operation = null; switch (operate) { case "+": operation = new OperationAdd(); break; case "-": operation = new OperationSub(); break; case "*": operation = new OperationMul(); break; case "/": operation = new OperationDiv(); break; } return operation; }}
客户端主方法类:
/** * @author : [LiuYanQiang] * @version : [v1.0] * @className : Main * @description : [客户端] * @createTime : [2022/5/27 20:18] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/27 20:18] * @updateRemark : [描述说明本次修改内容] */public class Main { public static void main(String[] args) { Operation operation; operation=OperationFactory.createOperation("+"); operation.set_numberA(1); operation.set_numberB(2); System.out.println(operation.getResult()); }}
多态理解
我们都知道封装是为了让类的调用者不需要知道类的实现细节,而多态能让类的调用者连这个类的类型是什么都不必知道,只需要知道这个对象具有某个方法即可。
因此,多态可以理解成是封装的更进一步,让类调用者对类的使用成本进一步降低,提高程序的可扩充性、可维护性、可复用性。
以上就是详解Java面向对象之多态的原理与实现的详细内容,更多关于Java多态的资料请关注盛行IT其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。