【发布时间】:2020-11-12 22:23:46
【问题描述】:
我正在复习 OOP 的概念,正在阅读。
这里本书将接口定义为
由对象的操作定义的所有签名的集合称为对象的接口。 (第 39 页)
和抽象类一样
抽象类的主要目的是为其子类定义一个公共接口。抽象类将其部分或全部实现推迟到子类中定义的操作;因此无法实例化抽象类。抽象类声明但未实现的操作称为抽象操作。非抽象的类称为具体类。 (第 43 页)
我想知道,如果我定义一个没有任何内部数据(变量)和具体操作的抽象类,只是一些抽象操作,它实际上不只是一组签名吗?那不就是一个界面吗?
所以这是我的第一个问题:
- 我可以说只有抽象函数的抽象类是“实际上(或理论上)”一个接口吗?
然后我想,这本书也谈到了类型和类。
对象的类定义了对象的实现方式。该类定义对象的内部状态及其操作的实现。相反,一个对象的类型只指它的接口——它可以响应的一组请求。一个对象可以有多种类型,不同类的对象可以有相同的类型。 (第 44 页)
然后我记得有些语言,比如Java,不允许多重继承,但它允许多重实现。所以我猜对于某些语言(如 Java),只有抽象操作的抽象类!= 接口。
这是我的第二个问题:
- 我可以说只有抽象函数的抽象类是“通常等同于”支持多重继承的语言中的接口吗?
我的第一个问题是检查定义,第二个问题是关于其他语言的工作原理。我主要使用 Java 和 Kotlin,所以我不太确定其他支持多重继承的语言。我不希望对当前的 OOP 语言进行一般、全面的审查,但对单一语言(可能是 python?)的一点提示会很有帮助。
【问题讨论】:
-
我认为以下链接可能会有所帮助:interface-vs-abstract-class-general-oo
-
@Hülya 是的,有点,但我的问题不是关于抽象类和接口如何使用/感知,而是实现。我想用所有抽象方法编写一个抽象类是一个糟糕的设计选择。但除了它是糟糕的设计选择之外,它们本质上是等价的吗?再想一想,我的问题可以解释为“我们可以将类型与类分开吗?”或“类是否意味着类型?”
标签: java python oop inheritance design-patterns