zoukankan      html  css  js  c++  java
  • 抽象类VS接口

    抽象方法:

    抽象方法没有方法体;抽象方法必须在抽象类里;抽象方法必须在子类中被实现,除非子类是抽象类。(实例化没有意义就可以定义为抽象类)

    抽象类:

    不能被实例化(但可以创建一个引用变量,其类型是一个抽象类,指向非子类实例),抽象方法必须在抽象类里;抽象类中不一定有抽象方法;一个抽象类的抽象方法必须被子类实现,除非子类也是抽象类。

    关键字:abstract;

    注意:没有抽象构造方法,也没有抽象静态方法;抽象类里可以有非抽象方法,创建子类的实例时可以调用

    接口

    关键字:interface

    语法:

    修饰符 interface 接口名称[externds 其他接口名]{

    //声明变量

    //声明方法

    }

    1.解决单根继承,系统对外提供的所有服务

    接口特性;

    接口中的变量都是静态常量(public static fianl),必须显式初始化。

    接口中所有的方法默认都是public absract

    接口没有构造方法,不可以被实例化,但可以被实现。

    接口里可以声明(并且可以提供实现)静态方法

    接口中的静态方法必须的是public 的,public修饰符可以省略,static修饰符不能省略;静态方法不能被继承及覆盖,所以被具体 所在的接口调用;接口中静态方法可以有多个

     

    接口可以有默认方法,接口中可以定义默认法方法default,就可以有方法体,默认方法会被直接继承,通过实例直接调用。如果一个类实现了多个接口,多个接口都定义了多个同样的默认方法

    方案一:实现类需要覆盖重写接口中的默认方法不然会报错

    方案二:可以使用super来调用指定接口的默认方法

    如果一个类继承了抽象类,实现了一个接口,抽象类和接口存在相同的方法(采取类优先的原则,优先继承抽象类的方法)

    默认接口可以有多个

    默认方法的好处解决了接口与其实现类之间耦合度过高,修改接口,所有实现类必须随之修改的问题

    实现类可以实现多个接口;

    关键字:implements,多个接口使用逗号隔开

    总结;一个类通过实现接口的方式,从而来继承接口的抽象方法;

    一个类只能继承 一个类,但可以实现多个接口;

    一个接口不能实现另一个接口,但可以继承多个其他接口。

     

    抽象类和接口

    相同点:代表系统的抽象层

    都不能被实例化

    都能包含抽象方法(用于描述系统提供的服务,不必提供具体实现)

    不同点:在抽象类中可以为部分普通方法提供默认实现

    一个类只能继承一个直接的父类,但可以实现多个接口

    抽象类和接口使用原则:

    is-a抽象类;has-a接口

    接口做系统与外界交互的窗口(接口提供服务)

    接口本身一旦制定,就不允许随意修改

    抽象类可以完成部分功能的实现,还有部分功能可以作为系统的扩展点

    抽象类便于复用,接口便于功能扩展和维护

  • 相关阅读:
    编程及应用中的一些快捷键(持续更新中)
    html5入门(head部分的基本认识)
    html5入门(j简单了解html)
    动态规划 ship
    js 解决两值交换
    styled-components解决全局样式'injectGlobal' 废除的问题
    mysql sql更新密码失败
    window nginx 基础命令
    MySQL 8.0
    "unexpected console statement” in Node.js
  • 原文地址:https://www.cnblogs.com/tiantongtong/p/13181817.html
Copyright © 2011-2022 走看看