一起理解Java的接口(初学Java基本脉络之三)

来源:互联网 发布:美国10月非农数据统计 编辑:程序博客网 时间:2024/03/29 06:53

接下来跟初学Java的同学一起来领会一下Java里面接口的概念和应用。

你确实已经在用接口了,最典型的比如Swing里面的监听。回头想想,是不是?

接口,interface,从中文的翻译上来说,接口的意思就是两个系统之间的联系。

所以如果想要理解接口,你必须先搞清楚两个系统之间会有什么样的联系呢?怎么联系呢?

我们举例说明:(下面的文字需要你打开你的编程工具,跟我一起实现所有代码。)

比如一个大牌导演,现在要组织一台晚会,这个大牌导演最擅长的就是大场面、大制作,演员无所为,他把谁放进去,谁准大红大紫。但是也不是没有任何标准,抓一个人就用,导演列出了他要使用的演员的标准:能说好台词;好,就这个标准,普天之下,谁符合标准谁就可以拿来用了。

导演和演员是有关系的,导演需要支配演员。

我们看具体的演员和一个具体的导演。

演员类:

Code:
  1. package net.qingsoft.example;   
  2.   
  3. public class Player {   
  4.  public void say(String message)   
  5.  {   
  6.   System.out.println("表演台词:---"+message+"---");   
  7.  }   
  8. }   

 

导演类:

Code:
  1. package net.qingsoft.example;   
  2.   
  3. public class Director {   
  4.  public void perform(Player player)   
  5.  {   
  6.   System.out.println("演出马上开始...");   
  7.   player.say("青软培训探秘Java");   
  8.   System.out.println("演出现在结束...");   
  9.  }   
  10. }   

 

 

大家已经看到了,导演中的perform方法会用到演员Player;

我们测试一下:

Code:
  1. package net.qingsoft.example;   
  2.   
  3. public class Test {   
  4.   
  5.  public static void main(String[] args) {   
  6.   Player player = new Player();   
  7.   Director director = new Director();   
  8.   director.perform(player);   
  9.   
  10.  }   
  11.   
  12. }   

 

结果:

Code:
  1. 演出马上开始...   
  2. 表演台词:---青软培训探秘Java---   
  3. 演出现在结束...  

 

 

没错,就是这个结果。

现在呢有个机器人,很厉害,也可以说台词。

Code:
  1. package net.qingsoft.example;   
  2.   
  3. public class Robot {   
  4.  public void say(String message)   
  5.  {   
  6.   System.out.println("我是机器人,我说台词:==="+message+"===");   
  7.  }   
  8. }   


 

那么这个机器人能否提供给导演来用呢?

也就是能否这样用呢?

Code:
  1. Robot Robot = new Robot();   
  2. Director director = new Director();   
  3. director.perform(player);  

 

别听我说,你最好现在就实验一下。看到了吧,不行。为什么呢?因为perform方法要的是Player,很明显,Robot和Player没有任何关系。我要的是馒头,你给我了一把剪刀,这个不行。

你想到了,让perform方法能使用Robot不就行了么,对我们可以重载。

修改一下Director类,重载perform方法

Code:
  1. package net.qingsoft.example;   
  2.   
  3. public class Director {   
  4.  public void perform(Player player)   
  5.  {   
  6.   System.out.println("演出马上开始...");   
  7.   player.say("青软培训探秘Java");   
  8.   System.out.println("演出现在结束...");   
  9.  }   
  10.  public void perform(Robot robot)   
  11.  {   
  12.   System.out.println("演出马上开始...");   
  13.   robot.say("青软培训探秘Java");   
  14.   System.out.println("演出现在结束...");   
  15.  }   
  16. }   


 

怎么样,现在你也可以perform(robot)了吧

呵呵,新的问题又来了,现在我在想,为什么下面这个鹦鹉不能去参加演出呢?

Code:
  1. package net.qingsoft.example;   
  2.   
  3. public class Parrot {   
  4.  public void say(String message)   
  5.  {   
  6.   System.out.println("鹦鹉学舌:---"+message+"---");   
  7.  }   
  8. }   
  9.     

 

是的,你现在依然还不能这样调用:

Code:
  1.  Parrot parrot = new Parrot ();   
  2. Director director = new Director();   
  3. director.perform(parrot);   

 

对,继续重载perform方法吧

可是能拿来做演员的实在太多了,猴子、猩猩,据说最近韩国有头大象都在练习说话了,怎么办?难道我要一直重载无数个perform方法么?

其实,导演perform要的就是一个会说话的这么个玩意,你拿来的玩意只要符合这个标准,就没问题了。那么我们不妨换个思路,导演只确认演员的标准,也就是只要求演员能说话就好了。

好的,导演对演员要求的标准是:

Code:
  1. package net.qingsoft.example;   
  2.   
  3. public interface Actress {   
  4.  public void say(String message);   
  5. }   
  6.     

 

这是个接口,导演根本不看你到底如何表演,只是要求了说你必须会say(String),你只要会这个就可以了。不过我给接口起这个Actress 名字确实不太合适,凑合用吧,也代表了现在导演的潮流了。

大家注意了,这个接口里面明确的say方法是抽象的,不需要任何具体操作,因为这是导演树立标准的时候所不需要考虑的。

导演类也改变为:

Code:
  1. package net.qingsoft.example;   
  2.   
  3. public class Director {   
  4.  public void perform(Actress actress)   
  5.  {   
  6.   System.out.println("演出马上开始...");   
  7.   actress.say("青软培训探秘Java");   
  8.   System.out.println("演出现在结束...");   
  9.  }   
  10. }   


你注意到了么,perform的参数变成了Actress。也就是现在不用再无休止的重载了,现在我们的导演perform方法只要一个,就是符合Actress这个标准就可以了。啥都行,只要符合这个标准。怎么才能符合这个标准呢?没错,就是implements,只要你的类,无论他出身何处(从什么继承),只要他implements了我们的接口,他就是一个光荣的Actress了(你可能会想那些男演员怎么办?那头大象怎么办?)。

好的,我们可以让我们之前的Player implements Actress,Robot implements Actress,Parrot implements Actress,甚至你现在的随便一个类implements Actress,然后你就可以

Code:
  1.  Xxxx xxxx = new Xxxx();   
  2. Director director = new Director();   
  3. director.perform(xxxx);  

 

只要这个Xxxx类实现了Actress标准就可以了。(你可以把任何一个类implements Actress,然后拿来替换Xxxx)

导演可以再也不用管到底天下有多少的可以当演员的类了,也不用天天为了频繁跳出来的新的演员类而不断重载方法了。他只看一件事情,就是你说来参加我导演的大戏,你必须符合我定的标准。当然导演可能随时更改这个标准。他更改标准的时候也从来不去关心那些符合标准的人的情况,我给改了标准,你们如果还要继续implements,那没办法,你们必须也要重新添加新的方法(我新定的标准),然后才能继续为我所用。

导演只看到了标准。

演员只需要符合标准。

导演可以不看演员的具体出身。

导演可以不管不问演员的其他需要。

导演只使用符合既定标准的那些方法。

谁想当演员,谁就要实现导演定义演员的标准。

拿起键盘,马上实验一下吧。

我只为了你能理解接口在编程中的作用。我们后面继续看看ActionListener到底是个什么,Java的监听如何实现呢?

更多文章见:http://www.ruanjianpeixun.net/post/201001013406.html

原创粉丝点击