如题,谢谢大家!

解决方案 »

  1.   

    从最本质入手.          一般都爱问  抽象类跟接口有什么不同 . 最好能用讲故事哪种方式.    什么懒爸爸 ,勤快儿子的角度..  我觉得还是很不错的 还有  CSDN上有好多帖子都有在讨论, 可以借鉴的.
    JF ..
      

  2.   

    个人认为在解释抽象类和接口时,应该强调其区别,弱化其共同点。因为这两者确实不是一个层面上的概念。
    遗憾的是,现在国内很多解释往往认为两者作用相当,甚至混为一谈。抽象类的实际存在意义比很多人想象的要小得多,其实它就是一个“半成品”的类,和一般类一样,但是不能直接实例化,因为它是半成品。
    其实,抽象类也可以是一个完全的“成品”,但是你不能把它当作成品来用。而要理解接口,则需要更多的抽象思维能力。
    类可以说是对象实例的一个完整模版,因为实例所拥有的属性和行为与类中定义的完全一致。
    而接口则可以说是一个完整模版的某一或某些部分,这些部分因为具有某种关联而被定义在一个interface中。最让初学者困惑就是:为什么接口中定义的方法,在其实现类中还要重新定义一次?而不是像继承那样,直接可以得到?接口的存在似乎可有可无。要回答这个问题,需要涉及到接口的作用问题。接口不是让其实现类得到某种特性,而是让其它的类可以从某个侧面去观照这个类,从而实现类间通信的目的。接口的作用如同它的名字一样,是用来对接的。所以,“实现接口”只是体现了接口作用的一部分,另一部分则是“使用接口”。还有一个我觉得很容易引起误解的解释在周围很流行,就是把超类和派生类的关系解释成父亲和儿子的关系,个人认为这是非常不恰当的。
    超类比派生类具有更多的抽象性,而父亲和儿子在抽象性层面上一致的。
    所以,我在平时用语中很少用“父类”和“子类”这两个词,写代码时也很少用Parent表示超类,Child表示派生类。
    大家可以参考一些权威著作,大多是用Base和Inherited等作为类名。以上个人心得,希望对楼主有用。
      

  3.   

    抽象类允许有实现 而接口不行 接口是规范了一种标准 实现者必须执行标准的规定
    接口中的属性默认都是static final
    抽象类可实现接口 而接口不能继承抽象类
      

  4.   

    共同点:
    都可以实现抽象一个类的效果,基本上在国内不强调区分,而着重应用.
    区别:
    1.
    接口的出现最大的作用是弥补继承类中单一的特点,所以接口可以继承多个类,同时必将其抽象化;
    而抽象类只能继承一个类.
    2.继承一个接口后,所有的方法,不能再抽象,必须实例化.(不能实现方法重写,方法修饰符为final);
    抽象类的重写方法可以再抽象.
    -----------------------------end----------------------------------
      

  5.   

    说说我的意见 接口跟抽象类都不允许实例化 但是可以定义一个引用 
    接口是抽象类的另一种形式 
    接口中所有方法不必再声明abstract 因为所有方法都是抽象方法
    接口中所有属性为final static 解释下 
    abstract和final不能同时使用 解释下
    接口叫实现implements 抽象类叫继承extends差不多了
      

  6.   

    建议把Thinking in Java多态部分完整照搬~~~(笑)
      

  7.   

    引用:
    接口只定义了应该做什么,而没有定义该怎么做 所以,如果你的程序只有你一个人完成,且每个功能只有一种实现的方法,我想你可以,注意是可以,不用接口 如果有多人合作,你可能开发的快,可惜你需要的一个类,你的同伴还没有完成,你怎么办?等他吗? 
    如果是面向接口,你可以自己先写一个最简单的实现来调试你的代码,Spring这时是个好帮手。 如果一个功能有多种实现,比如导出文档。 有的要html的,有的是word/Excel/PPt/PDF 等等。 
    因为你无法预见他们到底需要什么,这时候,你可以用接口,要求每个实现只需要完成 export 方法就行。 
    然后你自己做了一个Excel的,以后按需要再完成其他的,而此时,你原来的程序根本不用修改,因为他们调用的是接口,而不是具体的某个实现类。
      

  8.   

    接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的, 另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。 还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.举例:
    狗叫,猫叫,   对于叫就是一种接口。
    狗叫,猫叫,花猫叫。。这时候定义个抽象类比较好。 因为花猫继承猫的,所以比较有层次感。
      

  9.   

    我觉得用USB接口解释Java接口是个不错的选择。
      

  10.   

    系统的看文章,
    http://blog.csdn.net/Slugfest
      

  11.   

    最好是举现实中实际的例子,这样容易理解。
    老围着JAVA来讲肯定讲不明白。。
      

  12.   

    抽象类和接口都是为了向上转型的,如果一定要问抽象类和接口有什么不同,除了书上说的那些,还有就是从抽象类继承的子类只能向上转型为一个基类型,而实现接口的话,可以把子类向上转型为多种基类型,因为JAVA本身只能单继承,只能实现多个接口来向上转型为多种基类型. 
      

  13.   

    关于抽象类,UML书中的解释我觉得比较好,不能提供任何实例的模型就叫抽象类。比如篮球运动员,你不能用这样的一个概念去实例队员比赛 ,你所需要承担具体工作的是中锋,前锋,后卫,有具体分工的这些队员才能去打比赛,而一概而论的“篮球运动员”不行。补充我个人的理解就是,只提供概念的类就叫抽象类,它无法承担任何的具体工作,而这些是有继承了它而又有各自特点的子类完成的。
    至于接口,我的理解就是屏蔽具体的实现方法,比如你去邮局寄信,你只要告诉邮政人员寄信就行,至于他是骑自行车去送,还是用火车运,飞机运,跟你没关系,你只需调用他的“寄信”接口,正是所谓“屏蔽具体的实现方法”。
      

  14.   

    接口是不一定要實現的抽象類
    抽象類是必須要實現的接口你就告訴他們,接口是用來overlaod的
    抽象類是用來overwrite的
    雖然不一定確切,但我覺得這是最快解釋清楚的方法
      

  15.   

    http://topic.csdn.net/u/20071229/20/50c600d9-8369-4c75-a53b-73249696082b.html
    参考我以前的帖子,基本就可以否定一部分的发言了。
      

  16.   


    推荐这两篇。
    http://blog.csdn.net/Slugfest 
    http://topic.csdn.net/u/20071229/20/50c600d9-8369-4c75-a53b-73249696082b.html 第一篇从面向对象的角度阐述接口,既不落语法的窠臼,又会捎带模式。
    第二篇主要会纠正了一些错误的观点。
      

  17.   


    上面红色字体的讲法是错误的,接口中的方法修饰是public abstract,而不是final。如果是final那怎么可能要加上abstract??
    接口中的方法可以进行再抽象,即如果类实现了该接口中的个别方法,而没有实现另外的方法,只要把没实现的方法声明为抽象方法以及类也声明为抽象。interface A{
     void pintA();
     void printB();
    }abstract class Test implements A{
       void pintA(){System.out.println("A");}
       abstract void printB();//抽象
    }
      

  18.   

    Dan1980 说的话很有其独到的见地。赞一个。
      

  19.   

    再补充一点,接口中的变量声明默认是public static final的。不管你是否显示声明,变量的修饰符都是如此
      

  20.   

    楼主可以 去看看 《设计模式》里面从设计模式的角度 说明了 接口跟抽象类的区别,而且非常浅显 都是我们中国人自己的历史,名言 ,典故, 随便copy一个留言“1.抽象类是一个不完全的类,需要进一步专业化.接口只是一个行为的规范或规定;   
    2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;   
    3.一个类一次可以实现若干个接口,但是只能扩展一个父类   
    4.接口可以用于支持回调,而继承并不具备这个特点.   ”
        初学者绝对云里雾里!这样强记痛苦万分!
                而且我觉得从他们的程序规则上去记忆它的特点,还不如不记,他们最大的分别应该从设计模式上来区分!
      

  21.   

    .....我的神啊....
    这么晕...跟学生说能听懂吗?
    学习阶段嘛,就只要明白区别就好了,至于具体的意义阶段,应该在以后让学生在设计过程中慢慢体会
    恩....要不然让他们看"深入浅出XXXX",好好体会,自然就明白了
    这种东西都是自己体会来的,哪说的清啊
      

  22.   

    也就只有上冇这些了。google一下一大把
      

  23.   

    http://blog.csdn.net/pongba/archive/2008/02/25/2118907.aspx
      

  24.   

    初学者容易在考虑问题时向实现方面想,而接口、抽象类等东西却主要是从类的使用者上考虑问题,这一点必须明确
    抽象类是指类中存在没有实现的方法。在有模型中,可以确定某个类一定会有一种操作,但这个操作到底应该干些什么,则必须具体到他们的子类才可以确定。但对使用者而言,他只需要关心基类的类型。比如说,一个公司中有员工类(Employee),员工类有很多子类,如保安(Guarder),销售(Sales),会计(Treasurer),工程师(Engineer)等。在这个模型中,员工类(Employee)的方法:上班、工作、下班、领薪水、辞职等。但是,因为公司中每个员工因为职务不同,从而“工作”这个方法会因不同的子类而有不同的实现方式:保安做保卫工作,销售主要和客户进行联络,会计算账,工程师干技术活。因此“工作”这个方法只能由其子类或孙子类来实现。
    而从老板的角度来看,他在要求他的员工去工作的时候,只需要调用员工对象的“工作”方法即可,从他的角度看,无论什么职位的人都是“员工”。
      

  25.   

    interface我是这样理解的, 
    "接口确定了对某一特定对象所能发出的请求" 打个比方,电脑上的两个插孔,一个耳麦,一个耳机,耳麦就是只实现了“耳麦”这个接口,耳机则只实现了“耳机”这个接口, 所以,当耳麦插入耳麦的插孔时,由于他实现了“耳麦”的接口,所以他就能能实现耳麦这个功能,插入耳机的插孔则什么功能也实现不了,这个“接口”就确定了 “耳麦”这个对象发出的耳麦功能的请求。 回到java中,比如有一个主板的类,一个ATI显卡的类,有一个接口是让主板能识别ATI显卡的,当实现了这个接口后,主板就会识别ATI显卡,但是如果插NVIDIA 的显卡,这个主板就误差识别出。 
    over 这是我回答别人问题时说的~~~
    不知道说的对不对!
      

  26.   

    向甘草学习!!!
    文章写得好,我再一次引用http://blog.csdn.net/Slugfest/category/359453.aspx
      

  27.   

    http://java.chinaitlab.com/base/740669.html走出abstract class与interface困惑,建议看看
      

  28.   

    共同点: 
    都可以实现抽象一个类的效果,基本上在国内不强调区分,而着重应用. 
    区别: 
    1. 
    接口的出现最大的作用是弥补继承类中单一的特点,所以接口可以继承多个类,同时必将其抽象化; 
    而抽象类只能继承一个类. 
    2.继承一个接口后,所有的方法,不能再抽象,必须实例化.(不能实现方法重写,方法修饰符为final); 
    抽象类的重写方法可以再抽象.