以java.io.DataInput接口为例,java.io.DataInputStream是它的一个实现类,
那么,在实际的应用中,假如我不需要对接口以及类做任何的扩展,那DataInput di = new DataInputStream()和DataInputStream di = new DataInputStream()有没有什么实质的区别?应该怎么用这两种方式?请高手详细解答,谢谢

解决方案 »

  1.   

    (首先声明:本人也是菜鸟)
    我觉得没什么实质上的区别吧!
    不过我觉得最好就是用DataInput di = new DataInputStream()这个!
    用这个可以加强你代码的通用性!
      

  2.   

    DataInput di = new DataInputStream() 这是父类引用指向子类,通用性好,假如你不想使用DataInputStream而想使用其他的流只需要把DataInputStream换了就可以了,不需要在改变其他代码。
    DataInputStream di = new DataInputStream() 这个通用性不好,假如你不想使用DataInputStream你就需要该很多地方,包括代码。
    接口使用起来更加灵活!
      

  3.   

    面向对象的思想应该是这样的
    我需要一个什么东西,这个东西能做什么(what is it,what can it do)
    类就是:这是个什么东西(类别、类型)
    接口就是:这个东西能做什么(功能)
    现实中,我们需要一个门,这个门是个大楼的门,要求有门禁系统
    显然门应该定义成类,支持门禁系统是个接口类关注的是类型、类别,接口关心的是做什么
    特别现在流行的设计模式正是这种思想的体现
    spring的核心机制就是一个很好的体现
    我告诉你我要实现什么,怎么实现我不关心,只要你符合我的要求,我就用你DataInput di(1) = new DataInputStream()和DataInputStream di(2) = new DataInputStream()
    从所要求达到的目的来看这两个di没本质区别
    从实现过程来看1和2是完全两种思想,1是接口DataInput的一个具体实现,2是一个具体的类(参考上面内容)
      

  4.   

    DataInput di = new DataInputStream() 这是父类引用指向子类,通用性好,假如你不想使用DataInputStream而想使用其他的流只需要把DataInputStream换了就可以了,也就是说,你可以用其他的类,来产生实例,去实现接口,接口这样的用法很灵活,老兄!
      

  5.   

    DataInput di = new DataInputStream() 这是父类引用指向子类,通用性好,假如你不想使用DataInputStream而想使用其他的流只需要把DataInputStream换了就可以了,不需要在改变其他代码。 
    DataInputStream di = new DataInputStream() 这个通用性不好,假如你不想使用DataInputStream你就需要该很多地方,包括代码。 
    接口使用起来更加灵活! 
      

  6.   

    DataInput di = new DataInputStream()用接口时,这是多态的一种DataInputStream di = new DataInputStream()这里只是普通的实例化两者生成的实例 di ,功能上应该没有区别,这只是个人理解,呵呵~~ 
      

  7.   

    所谓接口可以看作是没有实现的方法和常量的集合。接口与抽象类相似,接口中的方法只是做了声明,而没有定义任何具体的操作方法。使用接口是为了解决Java语言中不支持多重继承的问题。 
      

  8.   

    我也是菜鸟,我尝试用我新手的思维来解释:首先,类可以分为具体类和抽象类。所谓抽象类就是不能被实例化的类,往往用于被具体类继承用的。比如,动物类和老虎类,我们可以创建一个老虎对象,但我们却无法创建出一个动物对象(动物对象对应的是什么?很抽象,所以没有意义。)。而接口,则和抽象类有点接近。比如我创建了一个狗的对象,它所对应的类(狗类)自然是继承动物类的子类了,但如果这个时候我想要狗类继承宠物类这个类(中的方法)怎么办呢?这个时候就要用到接口了。java中的类只能继承一个父类,但却可以实现多个接口,也就相当于在继承狗类之余还可以“继承”宠物类,甚至还可以实现其它更多的接口。抽象类可以有抽象的方法和具体的方法,但接口的方法全部都是抽象方法,也就是只有方法头部,没有方法主体。不知道有没有说漏,希望你能理解~
      

  9.   

    仁者见仁,智者见智接口和类基本上只有几个细节上的区别:如,接口没有方法实体,关系是继承关系,可以多实现等等。接口的优点在一般的应用中体现的不多,但是对于框架类库,如JDBC中的Connection、Statement、ResultSet等都是接口来操作。而且spring中一般都是使用接口来注入的,而且注入接口跟注入类的实现方式是不一样的。接口优点1:提高代码通用性。
    接口优点2:有了接口,类编写起来就有了一个大纲,直接去复写相应的方法就OK了。
    接口优点3:接口可以很好的组织类结构。
    接口优点4:可以并行开发,类中注入需要的接口,而接口中的方法是定义好的,这样就不需要实际的实现方法,就可以在类中注入接口来使用。具体实现的时候再去注入实现子类。
    ……
    等等接口注入:public interface IDemo{
       void run();
    }public class Test{  private IDemo demo;  public void setDemo(IDemo demo){  //这个就叫注入也叫传入
        this.demo=demo;
      }
      
      //其他方法略
    }
    这样 不需要IDemo的实现类,我就可以编写Test类了。
      

  10.   

    一般独立开发的时候,建议在通用性和扩展性需求强的地方使用接口,别的地方不需要接口。而在合作开发的时候,每个层之间最好都是接口来注入的。如dao层service层 dao注入service,service注入action
      

  11.   

    最简单的理解,接口上用来inplements的。实现的。。我就是这么理解的,定义一大堆规则让你去实现的。
      

  12.   


    如果不扩展,那么就不用接口好了。就你目前说的,确实没有本质区别,也没有什么作用。只是DataInputStream不仅实现了DataInput,还继承了FilterInputStream。如果 DataInput di = new DataInputStream(),以后你如果不强制转化的话,就只有DataInput的接口好提供给你了。
    而你其实有更多可以调用的接口。
      

  13.   

    给你写个函数就明白了
    public void fun(Object o)
    {
        DataInput=o;
    }
    其实我是想说,要是需要根据具体情况要做变动的话,DataInputStream这样具体的类就不行了
    呵呵,仔细想想就明白为什么了
      

  14.   

    忘了说明了,上面函数传递的是DataInput的实现类对象
    public void fun(Object o) 

        DataInput=o; 
        ...
        ...