zoukankan      html  css  js  c++  java
  • 接口与抽象类的区别

    介绍

    开闭原则

    开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

    抽象类

    概述: 在面向对象的概念中,所有的对象都是通过类来描绘的。而当需要更多信息来 描述/确定 一个具体的、符合应用场景的对象时,就需要 推迟 确定具体的实现。抽象类 主要针对实体抽象
    特点: 抽象类 是一个 未完全实现逻辑 的类,类中可以同时具有 具体实现逻辑抽象逻辑

    • 具体实现逻辑:具体实现方法,成员变量,静态方法等等
    • 抽象逻辑:抽象方法

    总结: 具体实现逻辑 提高复用性 ,抽象逻辑 降低耦合 ;抽象类封装确定的,开放不确定的,推迟到合适的子类中去实现

    接口

    概述: 接口由抽象类进化而来的,可以看作一种契约(协议),约束着服务的生产者和消费者。接口 主要针对动作(方法)抽象
    特点: 接口 是一个 完全未实现逻辑 的“类”,只具有 抽象逻辑

    • 抽象逻辑:接口中全都是抽象方法
    • 抽象方法的访问修饰符必须为 public ,因为这标志着对服务的消费者和生产者双方都可见,体现“契约”这个概念

    总结: 接口是一种 “契约” ,将具有共性动作(方法)的类抽象成接口,由接口派生出实现类,减少类之间的依赖带来的紧耦合。借用接口,自底向上完成重构,自顶向下完成设计

    区别

    设计层面

    • 抽象类 是一个 未完全实现逻辑 的类;接口 是一个 完全未实现逻辑 的“类”
    • 侧重点不同,抽象类针对实体抽象;接口针对动作抽象
    • 抽象类和接口都能解耦。抽象类更偏向于 复用 ;接口更偏向于 解耦 ,相比抽象类解耦更彻底和强力

    使用层面

    • 对于一个派生类来说,抽象类只能被 单继承 ;接口可以被 多实现
    • 抽象类中能有成员变量、具体实现方法、抽象方法等等;接口只能有抽象方法(Java中能有常量)
    • 抽象类中除了抽象方法不能private,其他的成员变量或方法访问修饰符随意;接口中的抽象方法访问修饰符全部为public的
    • 有抽象方法的类必须定义为抽象类,抽象类不一定有抽象方法
    • 抽象类除了涉及抽象有关的部分,和 普通java/C#类 定义基本一致
  • 相关阅读:
    java中的拷贝(二)深克隆
    java中的拷贝(一)
    java类的访问权限
    对象和对象引用
    equals和==
    类与继承(一)
    WebSocket简单介绍
    php获取请求的方式(get/post)
    php 使用jquery实现ajax
    PHP 系统常量及自定义常量
  • 原文地址:https://www.cnblogs.com/zhuang229/p/12026783.html
Copyright © 2011-2022 走看看