抽象与抽象类

cro*_*wso 7 oop

根据 http://www.cs.cornell.edu/courses/cs211/2006sp/Lectures/L08-abstraction/08_abstraction.html

抽象有两种形式.一个是函数抽象,另一个是数据抽象.但抽象类在哪里适合?据我所知,抽象类是一个完全不同的概念,即使名称暗示它与OOP原则有关.

有人可以对此有所了解吗?

Sco*_*ott 6

这些是非常不同的概念.

抽象类似于黑匣子的概念.输入进入,黑盒做某事,输出出来.在黑匣子里发生什么并不重要,你必须知道的是它的工作原理.一个真实的例子是java的哈希函数,所有用户必须知道的是它哈希输入值,对用户如何对数字进行哈希处理无关紧要.黑匣子是抽象的.关键是你不必知道它是如何工作的,只是它确实如此.

抽象类(至少在Java中)是接口和完整OOP类之间的混合.接口定义了任何扩展类必须具有的方法,它在代码中的协议将正确地实现接口并确保一切都按预期工作.抽象类具有这些空方法(协议),并且还具有可以调用的完全实现的方法.


Pri*_*ain 5

数据抽象是与抽象类不同的概念。

数据抽象——这意味着隐藏实现并仅显示基本信息。实际上,我们可以使用public、private、protected 等访问说明符来实现抽象。例如,私有函数/变量不能在类外部访问。抽象就是“隐藏”。 您可以参考 geeksforgeeks 了解更多详细信息。

抽象类 - 创建抽象类/方法,以便可以在其子类中实现它,因为抽象类不知道该方法中要实现什么,但它知道该方法将存在于其子类中。因此,当我们创建子类时,我们需要重写抽象方法以提供其实现。


Jer*_*fin 1

对象通常将数据与功能结合起来,抽象类也不例外。在某些情况下,提供的抽象几乎是纯数据,其函数仅提供对数据的访问(例如,集合类)。其他情况几乎相反(例如,C++ 中仿函数提供的抽象通常几乎是一个函数)。

当然,这些几乎都是极端情况——许多(大多数?)类别介于两者之间。