`
caydenliu
  • 浏览: 2806 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

抽象类和接口的区别,使用场景

    博客分类:
  • java
阅读更多

 

1、相同点
     A. 两者都是抽象类,都不能实例化。
     B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2.、不同点
     A. interface需要实现,要用implements,而abstract class需要继承,要用extends
     B. 一个类可以实现多个interface,但一个类只能继承一个abstract class
     C. interface强调特定功能的实现,而abstract class强调所属关系。 
     D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。
     这个选择有两点含义:
            一是Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。
            二是abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。
    E. abstract classinterfaceClass的中介。
         interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明privateprotected的方法,不能定义方法体,也不能声明实例变量。然而,interface却可以声明常量变量,并且在JDK中不难找出这种例子。但将常量变量放在interface中违背了其作为接口的作用而存在的宗旨,也混淆了interface与类的不同价值。如果的确需要,可以将其放在相应的abstract classClass中。
       abstract classinterfaceClass中起到了承上启下的作用。一方面,abstract class是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己的实例变量,以供子类通过继承来使用。

3、interface的应用场合
     A. 类与类之前需要特定的接口进行协调,而不在乎其如何实现。
     B. 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
     C. 需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。
     D. 需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

4、abstract class的应用场合
      一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:
      A. 定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstract class定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。
      B. 某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。
      C. 规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能

 

原文链接:http://blog.csdn.net/xcbeyond/article/details/7667733

分享到:
评论

相关推荐

    C# 多态教材 e.g 抽象类继承的武器场景示例

    C# 多态 抽象类继承的武器场景示例 接口实现的开火场景示例 虚方法的武器场景示例

    浅谈Java抽象类和接口的个人理解

    主要介绍了浅谈Java抽象类和接口的个人理解,具有一定借鉴价值,需要的朋友可以参考下。

    java设计的4种模式

    它实现接口或抽象类定义的方法和属性。 使用场景: ● 不希望或不适用使用继承的场景 ● 接口或抽象类不稳定的场景 ● 重用性要求较高的场景 注意: 发现类的继承有 N 层时,可以考虑使用桥梁模式。桥梁模式主要考虑...

    JAVA基础,常见java基础问题.rar

    2.接口和抽象类有什么区别 接口不能有方法实现,也就是说接口的方法都是抽象方法,但抽象类可以有方法实现。 接口要用implements实现,抽象类要用extends继承 一个类可以实现多个接口,但只能继承一个抽象类 ...

    设计模式:单例设计模式(全部实现方式)工厂设计模式,抽象工厂模式

    该模式通常会定义一个工厂接口或抽象类,由具体的工厂类实现该接口或抽象类来创建相应的产品。工厂模式的常见实现方式包括简单工厂、工厂方法、抽象工厂等。 抽象工厂模式是一种创建型设计模式,它的主要目标是提供...

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

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

    Jsp面试题目和答案

    抽象类和接口的区别,使用场景 hash算法的实现原理,hashcode的实现原理 error和exception的区别,RuntimeException和非RuntimeException的区别 继承与组合的区别,使用场景 使用静态工厂方法的好处和坏处 ...

    Java接口代码实现生活中的音乐播放器.txt

    示例代码展示了一个生活中实际应用的场景,即音乐播放器。我们定义了一个MusicPlayer接口,其中包含了播放、暂停和停止音乐的方法。然后,我们创建了两个具体类...它体现了接口的抽象性和灵活性,以及实现类的多态性。

    java-接口的使用,多态的使用,instanceof关键字,笔记本usb接口案例

    接口的使用场景是什么? 我们创建一个接口.然后通过实现此接口来规范多个类 如何定义一个接口格式: public interface 接口名称{ //接口内容 } 备注:换成了interface之后,编译生成的字节码文件仍然是:.java –> .class...

    Java相关知识点的学习(第八篇)

    3.1接口使用interface关键字 3.2接口由常量和抽象方法组成 3.3接口不能实例化,得通过实现类来实现 3.4接口可以多实现 3.5接口是可以多继承的 3.6接口是一种规范,标准 3.7类和接口的关系 3.8继承和接口的使用场景 ...

    23种设计模式之抽象工厂模式Java示例代码

    抽象工厂模式为创建一组相关或相互依赖的对象提供了一个接口,而不需要指定它们的具体类。本文适合对设计模式和Java编程语言感兴趣的读者学习和参考。 使用人群:软件开发工程师、Java程序员、架构师、设计模式爱好...

    Java零基础-继承.md

    建议通过阅读相关的Java教材或搜索资料,进一步扩展学习与继承相关的高级主题,如多层继承、抽象类和接口等内容。 如有疑问,可以参考Java官方文档或向技术论坛寻求帮助,进一步加深对继承的理解。

    安卓java读取网页源码-AndroidLearningNotes:第一次提交

    抽象类与接口的应用场景 抽象类是否可以没有方法和属性? 接口的意义 泛型中extends和super的区别 父类的静态方法能否被子类重写 进程和线程的区别 final,finally,finalize的区别 序列化的方式 Serializable 和...

    Java面试技术面知识扩展包第一弹

    2. 面向对象编程(OOP):面试官可能会询问您关于面向对象编程的概念和原则,如封装、继承、多态、抽象类、接口等,并要求您应用这些概念解决问题。 3. 集合框架:面试官可能会考察您对Java集合框架的理解和使用,...

    java面试常见问题.docx

    请解释Java中的抽象类和接口的概念及区别是什么? 请解释Java中的泛型(Generic)是什么?它有什么作用? Java中的异常处理机制是什么?如何处理异常? 请解释Java中的多线程是什么?如何创建多线程? Java中的反射...

    抽象工厂模式更换UI皮肤设计模式作业(100分)

    使用抽象工厂模式的主要目的是将对象的创建与使用相分离,从而提供了一种灵活的方式来创建对象家族,而不必指定具体的类。这可以使系统更具可扩展性和可维护性,因为可以轻松地添加新的具体工厂和产品类。 抽象工厂...

    src.zip Java的面向对象编程·讲解代码

    接口和抽象类 包和访问修饰符 构造函数和析构函数 成员变量和局部变量的区别? 适用人群: 这段语言描述的Java的面向对象讲解代码源码资源适用于那些对面向对象编程(Object-oriented programming, OOP)有一定了解...

    java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar

    java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 ...爸爸与儿子都实现工具人抽象类

    java设计模式【之】装饰者模式【源码】【场景:煎饼果子+肠+蛋】

    java设计模式【之】装饰者模式【源码】【场景:煎饼果子+肠+蛋】 * 测试类【之】煎饼果子来一套 * * 不改变原有对象的基础上,强化已经存在的功能 * 被装饰者与装饰者实现同一个抽象或接口 * 装饰后,最终还是...

Global site tag (gtag.js) - Google Analytics