`
afunti
  • 浏览: 105731 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

接口与抽象类得区别

阅读更多
语法角度:
1、抽象类 用abstract定义,而接口用interface定义

2、抽象类可以有自己的数据成员,变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值;
    而接口只能够有静态的不能被修改的数据成员(变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值,不过在interface中一般不定义数据成员),接口中所有的成员方法都是abstract的

3.抽象类可以有非 abstract的成员方法,而接口中的方法默认都是 public,abstract 类型的,而且在abstract中的方法必须有方法体(即{}),即使不实现任何功能;而接口中则不能有方法体;

4、抽象类可以提供某些方法的部分实现,而Java接口却不可以

从某种意义上说,interface是一种特殊形式的 abstract class。.

5、实现抽象类的类可以不实现抽象类中的所有方法,而接口的类必须实现其中的所有方法。

编程角度:

1、抽象类在 Java 语言中表示的是一种继承关系,java中不允许多继承,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface

2、在抽象类中,我们可以赋予方法的默认行为。但是在接口中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托

  在 抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的麻烦。因 为如果后来想修改类的界面(一般通过 abstract class 或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添 加新的参数)时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。但是如果界面是通过abstract class来实现的,那 么可能就只需要修改定义在abstract class中的默认行为就可以了。

  同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了 "one rule,one place" 原则,造成代码重复,同样不利于以后的维护。因此,在abstract class和interface间进行选择时要非常的小心





设计理念:
1、abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系

2、Java抽象类在Java语言中体现了一种继承关系,即父类和派生类在概念本质上应该是相同的,而对于Java接口则不然,并不要求Java接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已
分享到:
评论

相关推荐

    接口与抽象类区别

    接口与抽象类区别 在软件开发中,接口和抽象类是两个常用的概念,但它们之间的区别却让许多人感到困惑。那么,什么是抽象类和接口?它们之间有什么区别?下面,我们就来详细地探讨这个问题。 一、抽象类 抽象类是...

    C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例

    C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例 C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例

    11.java接口和抽象类的区别.zip

    11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别....

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

    #### 抽象类与接口的区别分析 ##### 实现数量上的差异 - **抽象类**:一个类只能继承一个抽象类。 - **接口**:一个类可以实现多个接口。 这种差异意味着接口更适合用于定义对象间的行为规范,而抽象类则适合定义一...

    抽象类与接口的区别

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

    C#类、接口、虚方法和抽象方法-抽象类和接口的相同点和区别

    这里我们将详细讨论这些概念以及抽象类与接口之间的相同点和区别。 首先,让我们来看看抽象类(Abstract Class): 1. 抽象方法是只有声明没有实现的方法,可以视为没有方法体的虚方法。例如: ```csharp public ...

    接口和抽象类的区别(面向对象)

    接口与抽象类的区别 抽象方法是必须实现的方法。就象动物都要呼吸。但是鱼用鳃呼吸,猪用肺呼吸。 动物类要有呼吸方法。怎么呼吸就是子类的事了。 现在有很多讨论和建议提倡用interface代替abstract类,两者从...

    java 抽象类与接口的区别

    理解抽象类与接口的区别并恰当运用,有助于提升代码的可扩展性和可维护性,使得软件设计更加灵活和面向对象。在进行Java编程时,应根据项目需求和设计原则,合理选择抽象类或接口来实现特定功能,以达到最佳的设计...

    java中接口与抽象类的详细分析与比较

    在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性的关键...通过阅读"java中接口与抽象类的详细分析与比较.doc"文档,你将获得更深入的洞察和实践指导,进一步提升你的Java编程能力。

    Java语言的接口与抽象类

    接口与抽象类的主要区别在于: 1. 继承/实现:抽象类主要被子类继承,接口主要被实现类实现。 2. 方法实现:抽象类可以包含方法实现,而接口只能包含方法声明。 3. 继承关系:抽象类单继承,而接口允许多继承。 4. ...

    1.5:接口和抽象类的区别.pdf

    4.实现抽象类和接口的类必须实现其中的所有方法。 抽象类中可以有非抽象方法。接口中则不能有实现方法。如果接口或者抽象类的子类不想实现则继续携程一个抽象方法 5.接口中定义的变量默认是public static final ...

    接口与抽象类

    本文将详细探讨接口与抽象类的区别,并结合实际编程场景来分析何时使用接口、何时选择抽象类。 #### 二、接口的基本概念 接口是一种特殊的抽象类型,它只定义方法、属性、索引器和事件等成员的签名,但不提供这些...

    java抽象类与接口实例java抽象类与接口实例

    java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...

    java抽象类与接口区别

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

    java利用接口和抽象类改写求圆的面积和梯形的面积.docx

    此外,接口和抽象类在用法上也存在一定的区别: - **静态方法**:接口里不能定义静态方法;而抽象类里可以定义静态方法。 - **构造器**:接口里不能包含构造器,而抽象类可以包含构造器。抽象类里的构造器不是用来...

    Java 接口和抽象类

    Java 接口和抽象类 Java 编程语言提供了两种机制来实现面向对象编程的多态性:接口和抽象类。这两种机制使得 Java 应用开发具有灵活性和敏捷性。 抽象类 抽象类是一种特殊的类,它不能被实例化,不能被直接使用,...

    C# 中接口与抽象的区别

    C# 中的接口和抽象类是两个重要的概念,但是它们之间的区别却经常被人们混淆。下面我们将详细讲解接口和抽象类的区别,并探讨它们在编程中的应用。 抽象类是特殊的类,只能被继承不能被实例化。抽象类可以包含抽象...

    Java接口与抽象类课件

    Java接口与抽象类的课件,适合初学者,主要对接口与抽象类进行简要介绍,PPT版本。

    java 抽象类与接口的练习

    在Java编程语言中,抽象类和接口是两种重要的面向对象设计...通过这样的练习,你可以更好地理解和掌握Java中的抽象类与接口,以及它们在实际开发中的应用。在实践中不断尝试和调试,将有助于深化对这两个概念的理解。

Global site tag (gtag.js) - Google Analytics