还是关于接口的问题——2个
看了许多关于接口的帖子,我对于接口仍然有两个问题不明白: 
 1.   接口是如何弥补单一继承之不足的? 
 2.   接口是如何实现“通信”的?   
 对于这两个问题,我真的很希望有哪位大哥能够给出实际的例子。如果没有例子,只要能讲得清楚也行,小弟在此磕头了。
------解决方案--------------------1 打个比方,你有一个两相插头的接口,还有一个三相插头的接口,这时你设计一个类,如果你设计的这个类只是继承了某个接口(比如两相插头的接口),那么你这个类只具有你继承的这个接口的接口方法,另一个接口方法(比如三相插头的接口方法)该类是不具有的;但是如果你设计的这个类都实现了那两个接口,那么你这个类就同时具有了两相插头的接口三相插头的接口;这样就弥补了单一继承的不足。   
 2 不太明白这个问题的意思?你所谓的通信是指什么?你调用接口的方法,不就是跟接口通信吗?   
 举例 
 interface InterfaceOne { 
     void doJobOne(); 
 }   
 interface InterfaceTwo { 
     void doJobTwo(); 
 }   
 public class MyJob implements InterfaceOne, InterfaceTwo { 
     public static void main(String[] args) { 
         MyJob mj = new MyJob(); 
         mj.doJobOne(); 
         mj.doJobTwo(); 
     } 
     public MyJob() { 
         System.out.println( "constructor "); 
     } 
     public void doJobOne() { 
         System.out.println( "do job one. "); 
     }   
     public void doJobTwo() { 
         System.out.println( "do job two. "); 
     } 
 } 
------解决方案--------------------所谓通信就是对象之间建立联系,互相交互来完成特定功能,当然,这主要就是靠接口了。
------解决方案--------------------1. 接口是如何弥补单一继承之不足的? 
    多重继承是不容易管理的复杂,被单一替换了. 
 实现接口, 没有直接变成了有多重继承的效果..   
  不用多理会这个问题了.单一继承+实现接口就能了
------解决方案-------------------------------------------- 
 另外,我上机试了一下。比如我希望类B的对象b能够也具有类A的方法,并能够调用该方法,那我直接在类B中申明一个类A的对象,然后在main方法中申明b,这样b不就具有了A的功能了吗?这样不是就可以不用接口了? 
 ------------------------ 
 这如果从设计模式的角度看,可以看作builder模式,相当于你把零散的每个类组合成一个大类,但是这样的模式不适合通用化,除非都是抽象类。   
 其实,接口的主要目的就是为了通用化,就好象生产零件都要符合国际标准接口一样,比如我有辆车,里面某个零件坏了,这时我用另外一个厂家的零件替换也可以,只要接口是一样的就行;否则,如果接口不一样,我就只能用原来那个厂家的零件,如果原来那个厂家倒闭了,那我的车就报废了。所以,考虑到通用化,生产商就要定义一个标准的零件接口,每个厂商根据这个接口生产自己的零件,这些生产出来的零件就是具体实现该零件接口的子类。由于生产商不同,生产出来的零件也各具特点,比如某厂商的车座是固定的,另一厂商的车座是可以躺下的,但都符合车座的接口标准,所以用户可以根据需要选购不同的车座。这就是接口相同,子类多样化。 
 同样的,在实际的程序开发中,比如 
 interface B { 
     void install(); 
 } 
 class A { 
     public void install(B b) { 
         B.install(); 
     } 
 } 
 这样,把A类看作车,B类看作车座,A类要安装车座时,只需要调用B类的install接口就行了,这时A并不关心B是被那个厂商生产的,只要有install接口就行。而其他生产商就可以根据B接口生产出不同的子类B1,B2等等 
 这样某个人要给车配上车座时就可以这样 
 class Person { 
     public static void main(String[] args) { 
         A a = new A(); 
         B b = new B1(); //这里可以根据实际情况自己选择B1或是B2 
         a.install(b); 
     } 
 }