原理:大话面向对象(四):多态
作者:强哥   类别:web前端    日期:2017-11-21 12:36:58    阅读:1952 次   消耗积分:0 分

何为多态?四个字:多种形态。"多态"(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();
    }
}


版权所有,转载本站文章请注明出处:蜗牛笔记, http://www.woniunote.com/article/18
上一篇:原理:大话面向对象(五):多态
下一篇:实验:利用JavaScript+CSS完成一个在线时钟效果
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}