举个例子,楼主看看能不能比较容易理解。
会使用多态的状况,通常希望其它地方能够使用父类来管理。
就拿软件的工具列(tool bar)来说,里头的按钮是能够动态增加、减少。
所以工具列有个函数叫作 addButton([按钮]);
但是工具列本身不能可能用重载的方式,无限制的增加各种按钮的类。
因此…最好是有个“按钮类”作为代表,所有的按钮都是“继承”它。
这样工具列就不需要理会未来会有多少种新的按钮,都不需要改写程式。
(这是使用多态的常见理由)
将焦点拉到这个父类,在不知道未来每个按钮有什么功能,会作什么事情的状况下。
只能先管好自己能够处理的事情,像是按钮被按下的检查。
这个时候可能会先建一个叫作“doSomething()”的函数,让自己呼叫,通过编译。
并且要求子类去“重写”doSomething() ,取代或增加原来的函数的功能。
子类实例化后,呼叫函数的时候,就变成执行子类的函数,达到“功能扩充”的目的。
至此,楼主说的三要素,都在这里面了。
其实只要用多态这种手段去解决问题,自然会满足这三个,不用去背它,
因为实作的时候一定离不开,但是如果考试会考,就另当别论了。