如何理解编程中的“多态”?
ACCT
最简单粗暴的例子(不是很恰当):
校长想找个人来搬东西,不在乎是老师还是学生,因此有:
HeadMaster::callSomeone(Person person) { person.moveSomething(); } Person p1 = Student(); Person p2 = Teacher(); hm.callSomeone(p1); // 这是可以的 hm.callSomeone(p2); // 这也是可以的
这样做的好处就是:对于校长来说,只需要考虑将搬东西这个事件完成即可,至于是找老师来还是学生来无所谓,老师是肩膀扛的,学生是地上拖的(moveSomething内部实现不同)不关校长的事。
这样一来,多态实现了程序上的解耦,callSomeone可以耦合在抽象程度更高的数据结构上。