接口用于支持运行时的动态解析方法.通常,为了从一个类调用另一个类的方法,在编译时,两个类都需要申明,以便JAVA编译器能够进行检查方法申明是否兼容.这有利于静态类和不可扩展的类创建环境.这在一个与此类似的系统中,不可避免的会使类层次的功能越来越强,以至于越来越多的子类都可利用这种机制.但是接口可以避免这种问题,它把一个方法或一组方法的定义和类层次分开.由于接口和类位于不同的层次,所以按照类层次的术语,不相关的类可以实现同一个接口.以上书上的话
(1)不太通俗易懂.高手 能否详细 生动的解释一下.
(2)有抽象类,要接口到底有什么好处(上面一段话也涉及,还是不清晰)
(3)实现接口的类与该接口是否存在什么关系. 

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【bx409027377】截止到2008-07-06 15:58:59的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:20                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:20                       
    结贴的百分比:0.00  %               结分的百分比:0.00  %                  
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    interface Ikk
    {
        public static final int aa=3;
        public void hh();/*{
    System.out.println("fdsfas");
    }*/
    }public class d implements Ikk
    {
        public void hh()
        {
            System.out.println("interface");
             System.out.println("aa="+Ikk.aa);//访问方法1
        }
        public static void main(String args[])
        {
            d a=new d();
            a.hh();
            System.out.println(new d().aa);//访问方法2
             
        }
    }
      

  3.   

    interface Ikk
    {
        public static final int aa=3;
        public void hh();/*{
    System.out.println("fdsfas");
    }*/
    }public class d implements Ikk
    {
        public void hh()
        {
            System.out.println("interface");
             System.out.println("aa="+Ikk.aa);  //访问方法一 直接用
        }
        public static void main(String args[])
        {
            d a=new d();
            a.hh();
            System.out.println(new d().aa);  //访问方法二 实例化类引用
            Ikk kk=new d();
            System.out.println("aa= "+kk.aa);  //访问方法三 通过接口引用访问实现
        }
    }
      

  4.   

    简单地说,一个类只能继承一个抽象类,但可以实现多个接口。
    继承是一种is a的关系,它代表实现的类是一个什么东西。比如一个经理,他是一个雇员,可以写成Manager extends Employee。
    接口是一种paly a roll as这样的关系,他代表一个类有什么功能。比如一个雇员,他可以有编程人员和美工的角色,可以写成A extends Employee implements Programmer, Artist。
    他俩的语义不同。
    这个是对楼主第二个问题的解答。其实二楼已经回答得差不多了。
    对二楼的一些解释:
    2.抽象类可以有实现,接口不能有实现,所以可以理解为借口比抽象类更抽象。
    3.一个具体类需要实现接口中所有方法,不一定要实现抽象类里所有方法(实现抽象类里所有抽象方法)。接口不能有类成员变量。3楼的话会打消2楼积极性,不可取。从楼主的问题来看,还处于学习Java语言的阶段,建议做一些项目,然后进行重构,在重构中会发现一些道理,然后学习设计模式及架构模式,这样就能深刻理解抽象类和接口的关系。
      

  5.   

    接口中的常量,因为是static的,所以一般通过类名.变量名的方式来访问,用对象直接访问也是可以的,只是不建议。
      

  6.   

    四楼里,三个对aa的引用都是成立的。在Eclipse编译器里,可以发先,第一个aa不会有黄色警告,在第2、3个对aa的引用里,编译器会建议改成静态引用。
    这个aa在运行时放在内存静态区域里面。
      

  7.   

    因为一个类只能有一个超类,但可以实现多个接口,当某个类已经extends某个类时,要扩展就只能通过接口的方式了。
    实现接口其实某种程度上来说类似多重继承。
      

  8.   

    我的理解是:抽象类和接口    就是一个统一的标准  就比如Connection  SUN就定义了这么一个叫Connection的统一标准由各数据库厂商去实现这个接口,好让我们能用JAVA连接到他的数据库若没这个标准  各数据库厂商自己定义的话,或许每个数据库都有一套方法.....所以说 他只是一个统一的标准而已
    要说抽象类和接口的区别,我也不太清楚.自己身有体会的就是,我要用一个接口,就必须实现他里面所有的抽象方法.但通过继承抽象类则不同,我们用哪个方法就重写哪个方法就行了.就像加一个关闭窗口的监听器时,你用接口WindowListener和用抽象类WindowAdapter是不同的因为你只用windowClosing()方法
      

  9.   

    1. 面向对象多态的实现离不开接口“A类调用B类,不如调用B接口来的灵活,因为你可以使用接口来使用B1,B2等实现类交互,方便代码的重用。 ” 
    你在传递参数或返回值时,传入A,不如将A剥离共性抽象一个A接口出来灵活,抽象之后你可以随时替换传入的参数(只要实现了A接口),避免了大量的改动,返回值亦同。甚至很多模式的实现也离不开接口(工厂模式等); 
    2. 解耦,复用等都离不开接口,抽象共性提高复用度,当然可用实体类,但是远不如用接口或抽象类来的方便,用接口抽象共性,用具体类实现个性,可以很大程度上解耦,和提高复用度,解耦可以方便修改维护,提高复用可以减少成本! 
    3.一个问题可以深入亦可浅薄
    转载http://www.javaeye.com/problems/1134
    上面有一些关系接口的讨论,可以去看看
      

  10.   

    1接口能用来模拟多继承.
    2抽象类多用于扩展.
    3到CSDN下载个新书.
      

  11.   

    我理解的接口!
    interface A{
    public int fn(int para);
    }
    class B implements A {
       public int fn(int para) {
          return para-1;
       }
    }
    class C implements A {
       public int fn(int para) {
          return para+1;
       }
    }
    另一个类
    class D {
       public void print(A a) {
          System.out.println(a.fn(5));
       }
       public static void main(String[] args){
        B b = new B();
        C c = new C();
        D d = new D();
        d.print(b);
        d.print(c); 
       }
    }
    运行结果 
    4
    6
    这是我理解的接口的最简单的用法。
      

  12.   

    假如有2个抽象类A,B各自提供一些抽象方法供使用,那么当你定义了一个类C既要用到A的方法又要用到B的方法就不好办了
    public class C extends A,B{ //这是错误的
        //code
    }
    但是如果定义的是2个接口A,B,那么
    public class C implements A,B{  //这样就可以满足要求
        //code
    }
    可以简单的理解为接口从某种意义上解决了程序对多重继承的需要。
    再者,如果用抽象类实现多态则其他所有的类都会成为该抽象类的子类(或者子类的子类等等),但是如果用接口来实现多态则每个实现接口的类之间没有必然的联系,它们和接口的关系大概也就是如果类没有完全的实现接口中的方法则要定义为抽象类。
      

  13.   

    举例来说,就用最简单的数据库更换为例吧。
    如果你想做到数据库及时切换,如果你通过接口来做,就很方便。只要更改接口对应的实际类就可以了,比如MySqlDAO,OracleDAO,MSSDAO等。然后利用Spring,Pico等将配置写到配置文件中,使用的时候更改一下具体引用类就ok了。上面的话我没仔细看,但感觉就是那样,利用接口你可以灵活进行装配,而如果是类的话,那就固定死了,代码的弹性很低。至于抽象类和接口的区别,这个争议一直很大。我个人的感觉抽象类一般代表的是对象固有的属性,而接口代表的是行为。实际上使用的话这个界线我觉得还是蛮难划分的,可能还没理解到那个层次。但是有一点,接口可以多处引用,而一个类最多却只能继承一个抽象类。而且从面向对象的角度来讲,抽象类目前已经不提倡被使用了。至于使用接口的好处,所有的java书,面向对象编程的书籍讲的都快烂掉了,上网搜多的是。
    总结一句话:面向对象编程你可以把它认为就是在面向接口编程。
      

  14.   

    http://topic.csdn.net/u/20080123/15/ec6c6637-c8b9-4d7d-82f7-caefbd3a1d2a.html