通过接口引用变量访问一个接口的多个实现是java获得运行时多态性的最强大的方式,也就是说在运行时根据接口引用变量所引用的对象类型来决定调用实现接口中抽象方法的不同版本,即接口被设计来支持运行时的动态方法解析。比如说有一个接口A,其中有一个抽象方法B(),这个B被一系列类实现了,在各个类中是不同的版本,现在可以通过A类型的引用变量来根据需要调用不同版本的方法。问题是:即使不使用接口,也可以直接通过创建一系列类(这些类定义了B()方法的各种版本)的对象,然后直接调用这些对象的B()方法来达到目的,那么接口的用处何在?

解决方案 »

  1.   

    接口更多的目标是松耦合
    比如你一个方法可以有多种业务实现;如果你用接口无论是哪个,都调用接口方法而已;但如果没有用接口,则每次都得调用具体类的方法,相比之下,则是封装下更好,当然这个封装得看对哪个层次的,这里指的是调用它的层次,而不是简单的main测试。
      

  2.   

    crazycy(崔毅) ( ) 信誉:101  2006-03-20 12:58:00  得分: 0  
    比如你一个方法可以有多种业务实现;如果你用接口无论是哪个,都调用接口方法而已;但如果没有用接口,则每次都得调用具体类的方法
    ------------------------------------------------------------------------------------
    可问题是通过接口调用方法,实际上还是要创建实现该接口的类的对象,然后把该对象的引用赋给接口引用变量,我觉得这与直接调用具体类的方法没有什么实质性区别啊,我只是觉得使用接口看上去比较整齐而已(因为接口引用变量名是一样的),那么在这里究竟接口有何好处呢?
      

  3.   

    楼主要真正理解接口的作用,必须站到一个更高的高度。
    最好把自己想像成一个类库的设计者(Library Designer),而同时想像有很多不同的用户(Client Programmer)会使用你设计的类。比如:
    你现在要设计一个类中的一个方法,它接收一个参数。
    你并不需要这个参数是某个特定类的子类,而只要求这个参数中含有某个特定的方法供你在你设计的这个方法中调用即可。这时,你只要用一个接口来限定调用你这个方法的用户就行了:
    把你需要调用的这个特殊方法写到一个接口里面,
    再把参数的类型声明成接口的类型来强制你的用户去实现它。这样,只要用户要调用你的方法,他就必须去实现你的接口,
    而你也就能保证每个调用你设计的这个方法的用户传入的都是你希望得到的参数了。