前言:面向对象的三大特性是:封装、继承、多态。通过三种方法把程序的耦合度降低,传统的印刷术和问题就在于所有的字都刻在同一版面上造成耦合度太高所致,活字印刷术的出现就是利用面向对象的思维克服了传统技术的缺陷。在代码工程中我们吸取几千年前老祖宗的智慧开始用设计模式使得程序更加的灵活,容易修改,并且容易复用。
接下来跟随小编去探索“多态”的奥秘吧~
“多态”用一句简单精炼的话描述是:通过继承实现的不同对象调用相同的方法,表现出不同的行为,称之为多态。
(一)我们先来看一段代码,看看多态思想在代码中的运用:
创建基类person,添加一个虚方法work():
创建子类teacher,继承person,重写父类person中的虚方法work():
创建子类student,继承person,重写父类person中的虚方法work():
创建子类police,继承person,重写父类person中的虚方法work():
到此,一个基类,三个子类已经创建完成,接下来我们去看看在主函数中多态是如何体现的:
运行结果:
在这个例子中,通过继承,使得per对象数组中的不同的对象,在调用work()方法时,表现出了不同的行为。
(二)abstract vs override
接下来我们看一下如何利用抽象实现多态:
还是拿上面的例子,我们不需要使用person这个父类创建对象,它存在的意义就是供子类来继承。所以我们使用abstract来对它进行优化。
步骤:把person父类改成抽象类,work()方法改成抽象方法:
抽象类person添加一个work()抽象方法,没有方法体,也不能实例化。
其他类的代码不变,子类也是用override关键字来重写父类中抽象方法,不过主函数中的代码要稍稍修改一下:
运行结果:
所以从这里我们可以看出使用虚方法还是使用抽象方法实现多态,取决于我们是否需要使用基类实例化的对象。
好啦,以上就是我对于多态的一点点理解,继续加油~~