比如interface A{
          void  test();
      } 
     class B  implements A{
           public void test(){
               System.out.println("a");
         }
    }
 public class Test{
      public static void main(String[] args){
             A   a = new B();
            B  b = new B();
            //B实现了A,功能应该大于等于A,用第二种实现不是更好吗,为什么要用第一种写法呢,好处在哪里          //经常看到以下写法,好处在哪里,请教各位大侠。
         List l = new ArrayList();
     }
}

解决方案 »

  1.   

    1. 通常情况下,接口都有不止一个实现类。所以,你要用接口,一般是用  A   a = new B();如果你这个接口确定以及肯定没有其他实现类的话,接口也不用声明了。
    2. 用接口作为变量定义的话,还可以防止程序员使用非标准的方法。
      

  2.   

    List l = new ArrayList();应该是方便以后修改代码(新手)
      

  3.   

        1、  你上面的写法体现了Java的多态性,好处在于程序改动起来比较方便,有一定的解耦性。
    比如说:C类也实现A接口方法test(); 相当于B类与C类都重写了test();方法,但是B类有B类的实现功能,C类有C类的实现功能,实现的作用不同。
          再比如:B类test()方法打印“B”语句,C类test()方法打印“C”语句。 A   a = new B(); a.test();就直接调用打印“B”语句的方法,万一你不需要打印“B”语句的功能,想实现打印“C”语句的功能,那你直接把 A   a = new B(); 中的B换成C不就行了吗,其他的什么也不需要改。
        2、再说B实现了A,功能不一定大于A,看你怎么做了,你要把B类的方法都写到接口里,B再实现呢?!
        3、 再说说List接口 List已知实现类有好多个,你可以参考API文档,不同的结构不同的功能。
    举个例子: List l = new ArrayList(); 与 List l = new LinkedList(); 这样写都是调用重写List的方法,ArrayList数组结构查询比较快,
    LinkedList 链表结构插入删除较快,在项目中刚开始感觉 List l = new ArrayList();这样写比较好,到后来感觉插入删除比较多,用
    LinkedList 比较好,那你直接替换就行了,其他的代码不用动。纯属个人理解,如有不正确请指出。
      

  4.   

    在设计阶段 ,可以一开始使用LinkedList,在‘优化系统性能是,改用ArrayList。基类List和迭代器所带来的抽象,把在容器之间进行转换时对代码产生恩影响降到最小限度------《JAVA编程思想》
      

  5.   


    你这样说我貌似懂一点,我在课本上看过这样写多态的好处。
    你所说的第二点,把B的方法都写到A接口中,B再对其实现,然后B类还可以有自己其他的一些功能方法,难道不是会大于等于A中的功能吗?我自己的理解哈,我初学,还不是特别懂。还有第三点,就是方便以后代码的修改,还有其他的好处不,谢谢回答!
      

  6.   

    你有个电脑类,类中有个接口变量是“ 显卡”!这时候如果别人写了个英伟达显卡类和AMD显卡类,你都可以赋值给原来“电脑”中的显卡变量!
    如果你一开始就在电脑中用英伟达显卡类表示显卡,那如果别人想赋值AMD卡就用不了!还有接口比类继承好处是你可以实现多个接口,如手机实现了MP3接口和MP4接口!
    而你只能继承一个父类,手机只能集成上代手机!
      

  7.   

    在设计阶段 ,可以一开始使用LinkedList,在‘优化系统性能是,改用ArrayList。基类List和迭代器所带来的抽象,把在容器之间进行转换时对代码产生恩影响降到最小限度------《JAVA编程思想》这句话的意思 ,是不是我可以理解为跟5楼的说的是类似的意思呢,
    比如:刚开始  List l = new LinkedList();
    最后我想修改为下面的写法,只需要改动这里即可,对代码产生的影响小,是这个意思吗
    List l = new ArrayLIst();java编程思想我看过一点点,好难懂啊,我才刚开始学习,还有太多不懂得地方,希望多赐教,谢啦。
      

  8.   


    你这样说我貌似懂一点,我在课本上看过这样写多态的好处。
    你所说的第二点,把B的方法都写到A接口中,B再对其实现,然后B类还可以有自己其他的一些功能方法,难道不是会大于等于A中的功能吗?我自己的理解哈,我初学,还不是特别懂。还有第三点,就是方便以后代码的修改,还有其他的好处不,谢谢回答!第二点我是说B类所有、全部的方法都写到A接口里面当然B也可以有自己的方法不写在接口里面,不要纠结这个问题.....
    了解多态的好处,就了解这样写的好处,java里面好多地方都存在多态,所以多态也是java的重点,多多学习,我也是菜鸟一个,我理解的也就这些了