根据http://www.cs.cornell.edu/courses/cs211/2006sp/Lectures/L08-abstraction/08_abstraction.html
抽象有两种形式。一个是函数抽象,另一个是数据抽象。但抽象类在哪里适合?据我所知,抽象类是一个完全不同的概念,即使名称暗示它与OOP原则有关。
有人可以对此有所了解吗?
答案 0 :(得分:5)
这些是非常不同的概念。
抽象类似于黑匣子的概念。输入进入,黑盒做某事,输出出来。在黑匣子里发生什么并不重要,你必须知道的是它的工作原理。一个真实的例子是java的哈希函数,所有用户必须知道的是它哈希输入值,对用户如何对数字进行哈希处理无关紧要。黑匣子是抽象的。关键是你不必知道它是如何工作的,只是它确实如此。
抽象类(至少在Java中)是接口和完整OOP类之间的混合。接口定义了任何扩展类必须具有的方法,它在代码中的协议将正确地实现接口并确保一切都按预期工作。抽象类具有这些空方法(协议),并且还具有可以调用的完全实现的方法。
答案 1 :(得分:0)
对象通常将数据与功能相结合,抽象类也不例外。在某些情况下,提供的抽象几乎是纯数据,其功能仅用于提供对数据的访问(例如,集合类)。其他情况几乎相反(例如,C ++中的仿函数提供的抽象通常几乎是一个函数)。
当然,这几乎是极端的 - 很多(大多数?)类介于它们之间。
答案 2 :(得分:0)
数据抽象是与抽象类不同的概念。
数据抽象- 这意味着隐藏实施并仅显示基本信息。 实际上,我们可以使用访问说明(例如public,private,protected 等)来实现抽象。 例如,不能在类外部使用私有函数/变量。 抽象只是“隐藏”。 您可以参考geeksforgeeks以获得更多详细信息。
抽象类-创建抽象类/方法,以便可以在其子类中实现,因为抽象类不知道该方法中要实现的内容,但知道该方法将存在于该方法中它的子类。因此,在创建子类时,我们需要覆盖抽象方法以提供其实现。