何为多态?四个字:多种形态。"多态"(Polymorphism)从另一个角度将接口从具体的实施细节中分离出来,亦即实现了"是什么"与"怎样做"两个模块的分离。利用多态性能创建"易于扩展"的程序,无论在项目的创建过程中,还是在需要加入新特性的时候,它们都可以方便地"成长"。
举个现实中的例子,"我",有多种角色(形态),在老婆面前,我是"老公",在老爸面前,我是"儿子",在儿子面前,我是"老爸",在学生面前,我是"老师"…,"我"具有多种形态,对于"我"的不同的形态,我将会说不同的话,做不同的事。
现在定义一个接口,IQiang,定义两个方法talk()和work(),说话和做事,我们知道,"我"在不同的形态(角色)下肯定会做不同的事情,说不同的话,比如:
1) 如果我是"老公",我会对老婆说"我爱你",我会履行老公做的事情,比如"拖地"。
2) 如果我是"儿子",我会对老爸说"工作辛苦了",我会履行儿子做的事情,比如"回家看看"。
3) 如果我是"老爸",我会对儿子说"好好学习",我会履行老爸做的事情,比如"送儿子上学"。
4) 如果我是"老师",我会对学生说"多态是什么",我会履行老师做的事情,比如"备课"。
这些角色和对应的说的话做的事都不一样,但是它们都可以实现接口IQiang中定义的方法talk()和work()。
"我"可以有很多角色,为讲解简单,我们取"老公"和"老师"这两个角色来进行代码演示即可。
首先定义接口及方法:
package code; public interface IQiang { public void talk(); public void work(); }
接着定义"老公"类实现该接口:
package code; public class Husband implements IQiang { public void talk() { System.out.println("I love you ..."); } public void work() { System.out.println("Let me clean ..."); } }
然后定义"老师"类实现该接口:
public class Teacher implements IQiang { public void talk() { System.out.println("What's Polymorphism ..."); } public void work() { System.out.println("Prepare the RFT material ..."); } }
到目前为止,与上一节讲的接口一样,没有什么特别之处,多态的重点表现在如下这段代码中:
package code; public class Qiang { public static void main(String[] args) { IQiang qiang; String type = "Teacher"; if (type.equals("Teacher")) qiang = new Teacher(); else qiang = new Husband(); qiang.talk(); qiang.work(); } }