A a = new AImpl(); (1)
AImpl a = new AImpl(); (2) 
a.say();A是接口
用(1)或(2)都可以得到对象a并调用say()方法为什么需要用(1)呢··那不多余定义了一个接口A吗?·
谢谢各位··

解决方案 »

  1.   

    不错,楼上说是思想的问题。
    如果A的实现类只有AImpl一个,那显然显得是多余了
    假设你是雇主、招很多人,你只需要告诉他们干什么、要什么结果就可以了,不需要知道他们是如果干的。
    程序也是一样、不需要知道实现、只需要知道接口中的方法就好了。
    还有就像电脑的usb接口一样,同样的接口可以插鼠标、键盘、硬盘、摄像头
    就好比“鼠标、键盘、硬盘、摄像头”都是这个A接口的实现类
      

  2.   

    如果是多个类都实现了A接口 ,而使用的时候,又不能很好的区分出具体是那个类 ,这时候使用接口就可以了,比如:public interface A{
       public void say() ;
    }
    public class A1Impl  implements A{
      public void say(){
      }
    }public class  A2Impl  implements A{
      public void say(){
      }
    }public class  A3Impl  implements A{
      public void say(){
      }
    }
    import  java.util.List ;
    import java.util.ArrayList ;
    public class Test {  public static void main(String[] args){
         List list = new ArrayList() ;
         
         list.add(new A1Impl()) ;
         list.add(new A3Impl()) ;
         list.add(new A2Impl()) ;
         list.add(new A3Impl()) ;
     
         A a  ;
         for (int i = 0; i < list.size(); i++){
            a = (A)list.get(i) ;  //不管是哪个实现类 ,统一转换为接口A
            a.say() ; 
         }
      }
    }