• java接口与抽象类


    2015-10-19 21:12:36

    知道接口和抽象类有所不同,但总是考虑不全,现在总结一下:

     抽象类:

    [public|proteced] abstract class 名称 [extends父类名列表] [implements接口名列表]
    {  
        [public] abstract 返回值类型 方法名(参数列表);
    //其他
     } 

    接口:

    [public]interface 接口名称 [extends父接口名列表]
    {
    //静态常量
    [public] [static] [final] 数据类型变量名=常量值;
    //抽象方法
    [public] [abstract] [native] 返回值类型 方法名(参数列表);
    }

    1、接口的修饰符只有public,抽象类必须在类前用abstract修饰。

    2、接口中的变量会被隐式地指定为 public static final 类型(必须给其初值,在实现类中不能重新定义,也不能改变其值),方法会被隐式地指定为 public abstract 类型,即接口中所有的方法都必须是抽象方法。

    抽象类可以有非抽象的成员变量和方法,它要求至少有一个抽象方法。

    补充:如果一个类不包含抽象方法,只是用 abstract 修饰的话也是抽象类,也就是说抽象类不一定必须含有抽象方法。个人觉得这个属于钻牛角尖的问题,因为如果一个抽象类不包含任何抽象方法,又何必定义成抽象类。

    3、如果实现了某个接口的是非抽象类,它必须实现该接口中的所有方法;如果实现该接口的是抽象类,可以不实现该接口中的抽象方法。

    当一个类继承一个抽象类时,除非将该子类也定义为抽象类,否则它必须实现父类的全部抽象方法,而普通方法可以有选择地重写。

    4、子类能够同时实现多个接口;子类只能单继承抽象类(抽象类任然是类,任然具有单继承性)。

    6、抽象类所跨域的是具有相似特点的类,所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在is -a关系,即父类和派生类在概念本质上应该是相同的。

    接口却可以跨域不同的类,并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的契约而已。

    7、抽象类是对一种事物的抽象,即对类抽象,是对整个类整体进行抽象,包括属性、行为。

    接口是对行为的抽象,是对类局部(行为)进行抽象。

    8、抽象类作为很多子类的父类,它是一种模板式设计,如果需要添加新的具体的方法,可以直接在抽象类中添加,子类可以不进行变更。

    接口是一种行为规范,它是一种辐射式设计,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

    9、对于抽象类而言,它是自下而上来设计的,我们要先知道子类才能抽象出父类。

    接口不同,它根本就不需要知道子类的存在,只需要定义一个规则即可,至于什么子类、什么时候怎么实现它一概不知。

  • 相关阅读:
    【DL】如何使用MMSegmentation训练数据集
    【python基础】Python错误:AttributeError: module 'json' has no attribute 'loads'解决办法
    【python基础】如何理解Python装饰器?
    【DL】如何生成用于训练的数据集
    【pytorch基础】基于训练的pytorch模型转换为onnx模型并测试
    【python基础】JupyterNotebook配置远程登录
    【工具使用】标注工具Labelme的安装以及使用
    【leetcode_easy_math】892. Surface Area of 3D Shapes
    【leetcode_easy】1636. Sort Array by Increasing Frequency
    【leetcode_easy】1640. Check Array Formation Through Concatenation
  • 原文地址:https://www.cnblogs.com/kanhaiba/p/4893048.html
Copyright © 2020-2023  润新知