`
caydenliu
  • 浏览: 2937 次
  • 性别: 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

分享到:
评论

相关推荐

    抽象类和接口 区别分析

    ### 抽象类和接口的区别分析 在面向对象编程中,抽象类与接口都是实现代码复用和提高软件模块化的重要工具。它们各自拥有独特的特性和应用场景,掌握这些概念对于编写高质量、可维护性强的代码至关重要。下面我们将...

    详细解析Java中抽象类和接口的区别

    ### 详细解析Java中抽象类和接口的区别 #### 引言 在面向对象编程中,Java作为一种广泛应用的编程语言,提供了多种方式来实现抽象的概念。其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这...

    C#中抽象类和接口的区别.txt

    综上所述,虽然抽象类和接口在实现多态方面具有相似的目标,但它们之间存在明显的区别。选择使用哪一种取决于具体的应用场景和个人的设计偏好。理解这些差异有助于更好地设计出健壮、可维护的软件系统。

    java 抽象类与接口的练习

    在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,供其他类去实现或继承。在这个练习中,我们将深入理解这两种机制,并通过实际的代码示例和注释来加深理解。 首先,让我们讨论...

    java抽象类与接口区别

    ### Java抽象类与接口的区别 #### 一、引言 在Java编程中,抽象类(Abstract Class)与接口(Interface)都是实现抽象的关键工具。它们各自有着独特的优势和适用场景,掌握这两者的区别有助于开发者更好地设计系统...

    抽象类和接口的区别

    ### 抽象类与接口的区别 在面向对象编程中,抽象类和接口是两种非常重要的概念,它们在软件设计和实现过程中发挥着不可替代的作用。本文将深入探讨这两种概念的区别,帮助开发者更好地理解和运用它们。 #### 一、...

    抽象类和接口的详细区别和联系

    在面向对象编程中,抽象类与接口是两种非常重要的概念,它们都是实现多态性的方式之一,但在使用场景、语法特性和设计哲学等方面存在明显的不同。本篇文章将深入探讨这两者的区别与联系,并通过具体的示例来帮助读者...

    介绍一下抽象类和接口的异同

    在编程世界中,抽象类和接口是两种非常重要的概念,它们在实现代码的组织和设计模式上发挥着关键作用。本文将深入探讨抽象类与接口的异同,并结合实际应用场景来帮助理解这两种机制。 首先,让我们从定义开始。抽象...

    java 抽象类与接口的区别

    在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们都用于实现多态性,但各自具有不同的特点和应用场景。了解并熟练掌握它们的区别对于编写高质量的Java代码至关重要。 首先,抽象类是一种不能被...

    抽象类与接口的区别

    ### 抽象类与接口的区别 #### 一、理解抽象类与接口的基本概念 在面向对象编程中,抽象类和接口都是重要的概念,用于描述共有的特性或行为,但它们在实现方式和用途上有所不同。 **抽象类**: - **定义**:抽象类...

    抽象类和接口 测试结果

    在编程世界中,抽象类和接口是面向对象设计的重要概念,它们都用于实现代码的抽象和多态性,但有着不同的使用场景和规则。这里我们将深入探讨这两种机制,并结合给出的"codePiece"代码片段来分析它们在实际应用中的...

    JAVA中抽象类与接口的区别

    在Java编程语言中,抽象类...总之,抽象类与接口各有特点,在实际开发过程中,开发者需要根据具体需求和场景选择最合适的工具。正确地理解和运用这两种机制,可以帮助构建出更为健壮、灵活且易于维护的软件系统。

    抽象类和接口

    #### 四、抽象类与接口的区别 1. **继承与实现**: - 抽象类使用继承(`extends`),而接口使用实现(`implements`)。 - Java不支持多继承,但一个类可以实现多个接口。 2. **方法实现**: - 抽象类可以包含...

    java中的抽象类和接口的理解

    ### Java中的抽象类和接口的理解 #### 一、引言 在面向对象编程语言Java中,抽象类(Abstract Class)和接口(Interface)是实现多...理解抽象类和接口的区别及其适用场景对于编写高质量、可维护的Java代码至关重要。

    实验5:Java抽象类与接口.doc

    通过本实验,学生将了解抽象类和接口的定义、特点及使用场景,并掌握如何使用抽象类和接口来描述不同的业务逻辑。 二、实验内容与步骤 ### 1. 分析给定的 Java Application 程序 通过分析给定的 Java Application...

    2022年抽象类和接口.ppt

    摘要:本文档介绍了抽象类和接口的概念、特点和使用方法,包括抽象类的定义、抽象方法、接口的声明和实现、抽象类和接口的异同点等。 一、抽象类 抽象类是一种特殊的类,它不能被实例化,需要被继承和实现。抽象类...

    抽象类和接口区别用法[文].pdf

    下面,我们将详细讨论抽象类和接口的概念、相同点、不同点和应用场景。 抽象类 在面向对象设计思想中,抽象类是指一个类中没有包含足够的信息来描绘一个具体的对象。抽象类用来表示对问题领域进行分析后得出的抽象...

Global site tag (gtag.js) - Google Analytics