`
guomingzhang2008
  • 浏览: 157453 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

接口和抽象类的区别总结

    博客分类:
  • Java
阅读更多
接口内可以有成员,凡是接口内声明的变量,就算不用任何修饰符,都默认是public stastic final的。



抽象类:包括大多数派生类所具有的功能(具体实现类似)
接口:包括某些类(甚至不相关的类)所类似的功能(具体实现可以不同)
抽象类:家用电器
派生类:冰箱,洗衣机,电视,收音机...
接口:开关
实现接口的类:电视,收音机,水龙头,马桶...

关于这个,其实全部用接口也不是不可以,但是如果全部用接口,那么所有的继承类都将自己实现所有的方法,这个有时候是不必要的,将大大的增加程序员的工作量以及设计上的错误
比如有个接口Person,有个方法叫做sayHello,只是简单的打印一个sayHello(表示打个招呼吧),Person接口下面有两个子类SomeConcretePerson1,SomeConcretePerson,当然这两个子类也会继承这两个方法,但是由于是Person是接口,两个子类必须自己实现打印sayHello,这个明显会重复代码,何不在把Person改为抽象类,实现sayHello方法呢?

abstract class Person{
   sayHello(){System.out.println("hello!")};
}
SomeConcretePerson1 extends Person{};
SomeConcretePerson2 extends Person{};
------------------------------------
interface Person{
   sayHello();
}
SomeConcretePerson1 extends Person{
    sayHello(){System.out.println("hello!")};//这里明显跟下面是重复的代码
};
SomeConcretePerson2 extends Person{
    sayHello(){System.out.println("hello!")};//如果不小心还有可能两个打印不同的东西
}

所以可以看到java api很多类顶层只是一个抽象类而不是接口,比如Object
每个类都是继承Object,如果Object是一个接口,想想你自己写的类将要实现多少在Object里面定义的方法?没有这个必要了
还有一个很好的例子是MouseListener跟MouseAdapter,前者是接口,后者是抽象类,该抽象类是继承MouseListener,并且所有方法体为空,在具体应用上,由于implements MouseListener将必须实现所有的方法,有时候可能并不需要,可能只需要相应一个mouseClicked事件就够了,其他事件不用管,这时候你只需要extends MouseAdapter,然后overridemouseClicked方法即可,这个就是很好的应用了,不用全部实现接口的所有方法

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/guomingzhang2008/archive/2009/10/05/4632877.aspx
分享到:
评论

相关推荐

    抽象类和接口实验报告.doc

    抽象类和接口实验报告

    Java继承_抽象类与接口的应用.

    1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结

    C#面向对象之接口和抽象类详解

    描述了C#中两个重要的知识点,接口和抽象类,总结了它们的优点和缺点,并且进行了对比,介绍了什么情况下用接口什么情况下用抽象类

    Java接口和抽象类用法实例总结

    主要介绍了Java接口和抽象类用法,结合实例形式总结分析了Java接口与抽象类的具体定义、使用技巧与相关注意事项,需要的朋友可以参考下

    java期末复习抽象类与接口,内部类,知识点.zip

    java期末复习抽象类与接口,内部类,知识点,期末考试用的,

    详解PHP的抽象类和抽象方法以及接口总结

    PHP中的抽象类和抽象方法自己用的不多,但是经常会在项目中看到别人使用,同样,今天在看别人的代码的时候,发现使用了抽象类,就总结下: 抽象类: 1、如果一个类中有一个方法是抽象方法,则这个类就是抽象类; 2...

    Java抽象类,抽象方法和接口

     在Java中用abstract修饰的类是抽象类,用abstract修饰的类的方法是抽象方法,抽象类和抽象方法用法总结如下。  1.abstract可以修饰class表示抽象类,可以修饰方法表示抽象方法,但是不能修饰成员变量,也是没有...

    java 抽象类与接口的区别总结

    主要介绍了java 抽象类与接口的区别总结的相关资料,需要的朋友可以参考下

    php抽象类和接口知识点整理总结

    主要介绍了php抽象类和接口知识点,整理总结了php抽象类与接口的概念、原理、操作技巧及相关使用注意事项,需要的朋友可以参考下

    抽象类与接口(学习笔记)

    类和类之间具有共同特征,讲这些共同特征抽取出来,就形成了抽象类。因为类本身是不存在的,所以抽象类无法创建对象(无法实例化)。 以下借用视频中总结的思维层次图: 抽象类属于什么类型: 抽象类也属于引用数据...

    C#中类与接口的区别个人总结

    一.类与接口的区别 类:描述了一个实体,包括实体的状态,也包括实体可能发出的动作。 接口:定义了一个实体可能发出的...2.接口与抽象类的区别: (1)A class can implement any number of interfaces but can subclass a

    接口知识点总结

    5)一个类如果实现接口必须重写父接口中所有的抽象方法,除非该类是抽象类 6)接口里不能有构造方法,不能被实例化 2.通过理解开关生产商和电器生产商的例子来理解:接口是一种约定 在编写接口时,所有的方法都是抽象...

    Java 基础核心总结 +经典算法大全.rar

    接口和抽象类接口 抽象类异常 认 识 Exception 什么是 Throwable 常见的 Exception 与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层...

    1.3:接口的特点总结.pdf

    接口不能被实例化(接口是特殊抽象类,抽象类中可能有抽象方法,实例化没有意义)。 接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改。(默认为public) 接口中的成员不能有任何实现(...

    Java-抽象类和接口--学习笔记.docx

    JAVA学习笔记,java知识点总结

    as3 接口类的用法和好处

    至此,我终于没办法了,要翻Java的技术文章来看,了解下接口和抽象类的区别所在。 在我所看到的文章中,貌似都认为抽象类的优势比接口还大,不过却推荐使用接口,而不用抽象类。看到那些文章后面的地方,终于...

    java类、对象、成员、package、import、访问修饰控制符总结

    java类、对象、成员 package、import、访问修饰控制符 接口和抽象类 细心总结,解惑上述所引起的一些困惑

Global site tag (gtag.js) - Google Analytics