前几天弄通了Java的接口问题,现在来和大家分享一下,不对的还望指正!

知道接口这个概念很长时间了,但是一直不是很明白。有时候弄的还很糊涂。

首先这个东西抽象不想其他的类一样,直接实例化就可以用,很直观。

其实,接口这个词好想不那么容易理解

下面就我个人对Java接口的理解,如有不对,还忘指正;

 

用一个计算机硬件上的知识来说明,大家都知道,计算机有主板,主板上有好几个PCI插槽,插槽可以插各种PCI板卡。下面我就这个实例来说明一下接口的概念,希望能对大家理解接口有所帮助。相册里有图片,希望能帮助大家理解

 

1.首先创建一个接口

  1. interface PCI 
  2.     void start(); 
  3.     void stop(); 
  4. }
这里定义了一个接口类,其实就是说 主板 和 PCI板卡 要都遵守的一个协议,就想PCI协议。里面包含了共同的的成员变量和方法,要知道这里的方法只是一个名字,具体的实现并不用在这里写出来,就像一纸协议一样,只是一个口号,具体的实现是其他别的方法时实现的

 2.创建一个声卡和网卡的类,要实现PCI接口

因为实现了PCI接口,所以这个类中必须要有接口中定义的类

  1. class SoundCard implements PCI 
  2.     public void start() 
  3.     { 
  4.         System.out.println("SoundCard the PCI is run!"); 
  5.     } 
  6.     public void stop() 
  7.     { 
  8.         System.out.println("SoundCard the PCI is stop"); 
  9.     } 
  10. class NetCard implements PCI 
  11.     public void start() 
  12.     { 
  13.         System.out.println(" NetCard the PCI is run!"); 
  14.     } 
  15.     public void stop() 
  16.     { 
  17.         System.out.pyong地方rintln(" NetCard the PCI is stop"); 
  18.     } 
  19. }

3.现在还没有主板,我们来个主板,当然要有PCI插槽才行

  1. class mainboard 
  2. {
  3.     PCI pci;
  4.     public void setcard(PCI pci)
  5.     {
  6.         this.pci=pci;
  7.     }
  8.     public void runstart()
  9.     {
  10.         pci.start();
  11.     }
  12.         public void runstop()
  13.     {
  14.         pci.stop();
  15.     }
  16. }

4.现在来组装

  1. public class Assemble
  2. {
  3.     public static void main(String [] args) throws Exception
  4.     {
  5.         SoundCard sc = new SoundCard();
  6.         NetCard nc = new NetCard();
  7.         mainboard mb = new mainboard();
  8.         mb.setcard(sc);
  9.         mb.runstart();
  10.         mb.runstop();
  11.         mb.setcard(nc);
  12.         mb.runstart();
  13.         mb.runstop();
  14.     }   
  15. }

细心的读者会发现,这个主板上只有一个PCI插槽,因为在主板上只定义了一个pci   要是我用完声卡,又要用网卡的时候就会发现直接写mb.runstart(); 是不行的因为只有一个插槽,所以就只能用一个板卡

 

 

现在来解决这个问题:

1,直接定义多个板卡,pci1,pci2,pci3。。。。。但是要知道,你还要为每个接口定义板卡的调用方法,

 

 

  1. class mainboard 
  2. {
  3.     PCI pci;
  4.     PCI pci1;
  5.     public void setcard(PCI pci)
  6.     {
  7.         this.pci=pci;
  8.     }
  9.     public void runstart()
  10.     {
  11.         pci.start();
  12.     }
  13.         public void runstop()
  14.     {
  15.         pci.stop();
  16.     }
  17.         public void setcard1(PCI pci)
  18.     {
  19.         this.pci1=pci1;
  20.     }
  21.     public void runstart1()
  22.     {
  23.         pci1.start();
  24.     }
  25.         public void runstop1()
  26.     {
  27.         pci1.stop();
  28.     }
  29. }

虽然代码都是一样的,写起来方便,但是这个不是我们追求的,我们要的是高效的代码

这个样子解决就很漂亮

 

 

 

 

 

 

  1. import java.util.HashMap; 
  2. class MainBoard 
  3.     HashMap <String,PCI> pci = new HashMap <String,PCI>(); 
  4.     public void setcard(String key, PCI pci) 
  5.     { 
  6.         this.pci.put(key, pci); 
  7.     } 
  8.     public void runstart(String key) 
  9.     { 
  10.         pci.get(key).start(); 
  11.     } 
  12.         public void runstop(String key) 
  13.     { 
  14.         pci.get(key).stop(); 
  15.     } 
  16. }

用hash表的方法,实现搜索板卡所插的PCI接口,然后就可以简单的调用板卡中的方法了

现在来看,方法简单,问题也解决了

 

接口概念抽象,这个例子只是想为不清楚接口的朋友提供点帮助,要想真的理解还要自己去体会

 

以上是一个接口的小例子,哪里有说的不对的还忘各位赐教。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值