zoukankan      html  css  js  c++  java
  • 接口(interface)与抽象类(abstract class)两者的异同

    首先说明一下,JDK1.8以后接口可以有默认方法和静态方法以及私有方法。

    一、概念:

      接口(interface):是抽象类的变体,其中所有的方法都是抽象的且不能有方法体,而且只能定义 static final 成员变量。例如:public static final int MAX_VALUE = 0x7fffffff;

      抽象类(abstract class):声明方法的存在但不去实现它的类叫做抽象类。抽象类中可以有实现了的方法,也可以没有实现了的方法;抽象类中可以没有抽象的方法,但有抽象方法的类一定是抽象类。抽象类与普通类最大的区别是它不能被直接实例化,只能通过子类间接实例化。

    二、区别

    1.两者的共同点:

      (1)两者都是抽象类,都不能被实例化。

        (2) interface实现类及abstract class的子类都必须要实现已经声明的抽象方法。

    2.两者的不同点:

      (1)一个类可以实现(implements)多个interface,但一个类只能继承(extends)一个abstract class。

      (2)interface强调特定功能的实现,具有哪些功能,而abstract class强调所属关系。

      (3)尽管interface实现类及abstract class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现(只实现其中的抽象方法,覆盖其中已实现了的方法,二者均实现)。

      (4)interface是完全抽象的,只能声明方法,而且只能声明public的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。

    三、为什么Java中采用多接口而没有多继承???

        接口只定义了你做什么,而不关心你怎么做;

        如果是多继承,有可能两个类定义的两个方法是做同一件事情的,那么他们的子类就无法选择到底去用哪一个。

  • 相关阅读:
    面向对象思想
    jQuery随笔
    总结关于linux操作
    转.linux上安装python
    sql server 基本语句
    linux 常见指令
    loadrunner 录制时不自动弹出网页
    Linux 安装MySQL
    linux关于安装
    loadrunner 性能测试
  • 原文地址:https://www.cnblogs.com/luckyjcx/p/12410836.html
Copyright © 2011-2022 走看看