美文网首页
面向对象(五)

面向对象(五)

作者: 凯玲之恋 | 来源:发表于2020-04-09 22:18 被阅读0次

在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。

不过,并不是所有的面向对象编程语言都支持这两个语法概念,比如,C++ 这种编程语言只支持抽象类,不支持接口;而像 Python 这样的动态编程语言,既不支持抽象类,也不支持接口。

尽管有些编程语言没有提供现成的语法来支持接口和抽象类,我们仍然可以通过一些手段来模拟实现这两个语法概念。

1 抽象类与接水口的区别

1.1 java 如何定义抽象类的。

  • 抽象类不允许被实例化,只能被继承
  • 抽象类可以包含属性和方法。方法既可以包含代码实现,也可以不包含代码实现。不包含代码实现的方法叫作抽象方法。
  • 子类继承抽象类,必须实现抽象类中的所有抽象方法。

1.2 java 如何定义接口。

  • 接口不能包含属性(也就是成员变量)。
  • 接口只能声明方法,方法不能包含代码实现。
  • 类实现接口的时候,必须实现接口中声明的所有方法。

1.3 区别

  • 抽象类实际上就是类,只不过是一种特殊的类,这种类不能被实例化为对象,只能被子类继承。
    继承关系是一种 is-a 的关系,那抽象类既然属于类,也表示一种 is-a 的关系。
  • 接口表示一种 has-a 关系,表示具有某些功能。对于接口,有一个更加形象的叫法,那就是协议(contract)。

2 抽象类和接口能解决什么编程问题?

2.1 抽象类

  • 抽象类不能实例化,只能被继承。
    继承能解决代码复用的问题。
    多个子类可以继承抽象类中定义的属性和方法,避免在子类中,重复编写相同的代码。
  • 编译器会强制要求子类重写 log() 方法

抽象类可以更优雅的实现多态。

2.2 接口

  • 抽象类更多的是为了代码复用,而接口就更侧重于解耦
  • 接口是对行为的一种抽象,相当于一组协议或者契约,
  • 调用者只需要关注抽象的接口,不需要了解具体的实现,具体的实现代码对调用者透明。接口实现了约定和实现相分离,可以降低代码间的耦合性,提高代码的可扩展性。

3 如何决定该用抽象类还是接口?

  • 如果我们要表示一种 is-a 的关系,并且是为了解决代码复用的问题,我们就用抽象类;

  • 如果我们要表示一种 has-a 关系,并且是为了解决抽象而非代码复用的问题,那我们就可以使用接口。

  • 从类的继承层次上来看,抽象类是一种自下而上的设计思路,先有子类的代码重复,然后再抽象成上层的父类(也就是抽象类)。

  • 接口正好相反,它是一种自上而下的设计思路。

  • 我们在编程的时候,一般都是先设计接口,再去考虑具体的实现。

参考

08 | 理论五:接口vs抽象类的区别?如何用普通的类模拟抽象类和接口?

相关文章

  • Java 工程师成神之路 | 2019正式版

    摘要:什么是面向对象 基础篇 01面向对象 → 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基...

  • 第七篇 面向对象编程

    一、复习 二、time模块的补充 三、面向对象 四、初始面向对象和类 五、面向对象之间的交互 六、面向对象的组合 ...

  • 阿里P8资深架构师耗时一年整理19年Java工程师成神之路

    1、基础篇 01:面向对象 → 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基本原则 → 平台...

  • Java 工程师成神之路 | 2019正式版

    一.基础篇 01 面向对象 → 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基本原则 → 平台...

  • JavaScript之面向对象编程

    五、面向对象编程 目录:面向对象原型继承、面向对象class继承(ES6引入的) 1.面向对象原型继承 类:模板 ...

  • js面向对象

    js面向对象(第五周) 什么是面向对象 面向对象是一种编程思想,是在面向过程编程(结构化编程)之后出现的,面向对象...

  • Java 工程师成神之路

    一、基础篇 01.面向对象 → 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基本原则 → 平台...

  • Java 工程师成神之路 | 2019正式版

    1 基础篇 01面向对象 → 什么是面向对象面向对象、面向过程 面向对象的三大基本特征和五大基本原则 → 平台无关...

  • Java从入门到入坑(基础篇)

    01:面向对象 1:什么是面向对象 面向对象,面向过程 面向对象的三大基本特征和五大基本原则 三大特性:封装,继承...

  • 面向对象编程

    面向对象编程 一、面向对象和面向过程 二、类和对象 三、内存图 四、构造方法 五、关键字 六、面向对象的三大特征 ...

网友评论

      本文标题:面向对象(五)

      本文链接:https://www.haomeiwen.com/subject/ddwfmhtx.html