zoukankan      html  css  js  c++  java
  • interface和abstract 的区别和相同点

    在Java语言中,abstract class和interface是支持抽象类定义的两种机制。

    不能创建abstract类的实例,然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。

    不能有抽象构造函数或抽象静态方法。

    Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。

    接口(interface)是抽象类的变体。

    在接口中,所有方法都是抽象,公开的。多继承性可通过实现这样的接口而获得。

    接口中的所有方法都没有一个有程序体。接口只可以定义staticfinal成员变量。

    接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。

    当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。

    由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。

    引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口。

    接口可以继承接口。抽象类可以实现(implements)接口,抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数。接口更关注“能实现什么功能”,而不管“怎么实现的”。

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

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

    3. interface的应用场合 
    A. 类与类之前需要特定的接口进行协调,而不在乎其如何实现。 
    B. 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。 
    C. 需要将一组类视为单一的

  • 相关阅读:
    python_levenshtein 的安装和使用
    接口测试困难
    pycharm修改windows的IP
    Excel读取,修改,新建
    appium混合应用的处理
    冒泡排序
    选择排序
    插入排序
    python中两种退出方式os._exit(),sys.exit()
    二分查找
  • 原文地址:https://www.cnblogs.com/chendezhen/p/8574501.html
Copyright © 2011-2022 走看看