知道接口这个概念很长时间了,但是一直不是很明白。有时候弄的还很糊涂。
首先这个东西抽象不想其他的类一样,直接实例化就可以用,很直观。
其实,接口这个词好想不那么容易理解
下面就我个人对Java接口的理解,如有不对,还忘指正;
用一个计算机硬件上的知识来说明,大家都知道,计算机有主板,主板上有好几个PCI插槽,插槽可以插各种PCI板卡。下面我就这个实例来说明一下接口的概念,希望能对大家理解接口有所帮助。相册里有图片,希望能帮助大家理解
1.首先创建一个接口
- interface PCI
- {
- void start();
- void stop();
- }
2.创建一个声卡和网卡的类,要实现PCI接口
因为实现了PCI接口,所以这个类中必须要有接口中定义的类
- class SoundCard implements PCI
- {
- public void start()
- {
- System.out.println("SoundCard the PCI is run!");
- }
- public void stop()
- {
- System.out.println("SoundCard the PCI is stop");
- }
- }
- class NetCard implements PCI
- {
- public void start()
- {
- System.out.println(" NetCard the PCI is run!");
- }
- public void stop()
- {
- System.out.pyong地方rintln(" NetCard the PCI is stop");
- }
- }
3.现在还没有主板,我们来个主板,当然要有PCI插槽才行
- class mainboard
- {
- PCI pci;
- public void setcard(PCI pci)
- {
- this.pci=pci;
- }
- public void runstart()
- {
- pci.start();
- }
- public void runstop()
- {
- pci.stop();
- }
- }
4.现在来组装
- public class Assemble
- {
- public static void main(String [] args) throws Exception
- {
- SoundCard sc = new SoundCard();
- NetCard nc = new NetCard();
- mainboard mb = new mainboard();
- mb.setcard(sc);
- mb.runstart();
- mb.runstop();
- mb.setcard(nc);
- mb.runstart();
- mb.runstop();
- }
- }
细心的读者会发现,这个主板上只有一个PCI插槽,因为在主板上只定义了一个pci 要是我用完声卡,又要用网卡的时候就会发现直接写mb.runstart(); 是不行的因为只有一个插槽,所以就只能用一个板卡
现在来解决这个问题:
1,直接定义多个板卡,pci1,pci2,pci3。。。。。但是要知道,你还要为每个接口定义板卡的调用方法,
- class mainboard
- {
- PCI pci;
- PCI pci1;
- public void setcard(PCI pci)
- {
- this.pci=pci;
- }
- public void runstart()
- {
- pci.start();
- }
- public void runstop()
- {
- pci.stop();
- }
- public void setcard1(PCI pci)
- {
- this.pci1=pci1;
- }
- public void runstart1()
- {
- pci1.start();
- }
- public void runstop1()
- {
- pci1.stop();
- }
- }
虽然代码都是一样的,写起来方便,但是这个不是我们追求的,我们要的是高效的代码
这个样子解决就很漂亮
- import java.util.HashMap;
- class MainBoard
- {
- HashMap <String,PCI> pci = new HashMap <String,PCI>();
- public void setcard(String key, PCI pci)
- {
- this.pci.put(key, pci);
- }
- public void runstart(String key)
- {
- pci.get(key).start();
- }
- public void runstop(String key)
- {
- pci.get(key).stop();
- }
- }
用hash表的方法,实现搜索板卡所插的PCI接口,然后就可以简单的调用板卡中的方法了
现在来看,方法简单,问题也解决了
接口概念抽象,这个例子只是想为不清楚接口的朋友提供点帮助,要想真的理解还要自己去体会
以上是一个接口的小例子,哪里有说的不对的还忘各位赐教。