当前位置: 首页 > 知识库问答 >
问题:

抽象与抽象类和接口

桑睿识
2023-03-14

我想读关于抽象的文章,但读到不同的文章,我感到很困惑。

下面是我无法理解的问题:

1)“抽象是通过使用抽象类和接口实现的吗?”我对此进行了搜索,得到了三种类型的答案:

  • 与此处解释的不同。
  • 它们是相同的,只是不同的观点,就像这里解释的。
  • 最后一个是抽象类用来实现抽象。

哪一个是真的?请举一个简单的例子。

2)“抽象意味着隐藏不必要的细节。比如专注于一个对象做什么而不是它是如何完成的。”

这是正确的吗?

3)在抽象类中,我们可以定义具体的实现和方法签名,并且我们强制开发人员(使用抽象类的开发人员)自己编写实现。那么,如果他正在编写自己的实现,怎么可能是抽象呢?我认为抽象就是隐藏实现。在接口中,开发人员必须编写每个方法实现。

那么,抽象是从哪里来的呢?

4)词典对抽象的定义是“处理思想而不是事件的质量”--我认为这是接口的正确定义,部分是抽象类的正确定义,但计算机领域/领域对抽象的定义是“隐藏不必要的细节”(简而言之)。

我对它们的区分是正确的吗?

请用例子或简单的陈述来解释/回答这个问题。

谢谢!

共有1个答案

安建木
2023-03-14

抽象是一个可以有一个或多个实现的概念。

例如:您的计算机可以通过许多不同的方式连接到本地网络(以太网、Wi-Fi、ATM、拨号调制解调器等),但您的Web浏览器通常不必担心您在任何给定的时间使用的是这些方法中的哪一种,因为较低级别的软件提供了您的浏览器可以依赖的公共抽象。所以“连接到网络”是抽象,以太网和Wi-Fi等等都是这种抽象的实现。

您会注意到,到目前为止,我根本没有提到面向对象编程。这是因为实现抽象的思想对于各种设计和体系结构都是通用的;它不是OOP特有的。

在面向对象编程中,实现很可能被表示为由类指定的对象,抽象通常由抽象类或接口指定。但这并不意味着抽象的类和接口只是为了指定抽象,反过来,也不意味着所有的抽象都是由抽象的类和接口指定的。例如,著名的设计模式(单例模式、工厂方法模式等)都是在代码中没有显式指定的抽象;相反,对于这些抽象的各种实现,我们有单独的(不相关的)代码片段,而抽象仅仅驻留在程序员的头脑中(和设计文档中,以及类和变量等名称中)。

3)在抽象类中,我们可以定义具体的实现和方法签名,并且我们强制开发人员(使用抽象类的开发人员)自己编写实现。那么,如果他正在编写自己的实现,怎么可能是抽象呢?我认为抽象就是隐藏实现。在接口中,开发人员必须编写每个方法实现。

那么,抽象是从哪里来的呢?

抽象是针对类的客户端(用户)的。当然,需要有一个实施;但是,例如,接受list 的代码不必担心传入的实例arraylist还是linkedlist,因为它们都实现了所需的抽象。

即使是同一个开发人员同时编写实现代码和客户端代码时,关注点的分离也可以使维护这两个部分变得更加容易;如果抽象定义良好,并且客户机代码从不“窥探”实现细节,那么实现和客户机代码都可以更加简单和清晰。(即使将“抽象”简单地表示为Javadoc而不是实际的接口,也是如此。)

 类似资料:
  • 问题内容: 在面试中,有人问我以下问题。我试图回答这个问题,但是我想确切回答这个问题。 如果我可以将Abstract类模拟为Interface,为什么Java提供了Interface? 这意味着如果在Abstract类中我可以将所有方法标记为abstract,然后abstract类将用作接口,那么为什么我需要接口。 谁能简单地解释一下我。 问题答案: 这是一个非常标准的面试问题。答案是:因为您可以

  • 问题内容: 谁能告诉我完全抽象的类和接口之间到底有什么区别? Abstract类也可以将其所有方法都作为abstract。接口的所有方法均为抽象。在这种情况下,两者之间的主要区别是什么? 纯抽象类和接口之间是否有区别?接口有什么用?在使用接口的地方,我们可以使用纯抽象类吗? 问题答案: 要完成以前的答案: 接口是一个“合同”。如果一个类实现一个接口,则它必须提议该接口中列出的所有服务。 抽象类是骨

  • 我使用PDO抽象类。我想知道是否有必要每次都为变量空,或者当脚本结束时它是否会这样做? 您还可以告诉我,对于这种类型的结构,取消的最佳方法是什么?

  • 接口描述了类的行为和功能,而不需要完成类的特定实现。 C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来指定的,如下所示:class Box { public: // 纯虚函数 virtual double getVolume() =

  • 问题内容: 我接受了一次采访,面试官首先问我抽象类与所有抽象方法和接口之间的区别是什么。 我回答说,如果将来需要继承某些东西,并且已经扩展了一个类,那么您将无法做到这一点。 然后,他说,在这种情况下,您将永远不必扩展任何其他课程,而您必须执行合同。在这种情况下,最好使用抽象类或接口? 我告诉他您可以使用其中任何一个,但他并不满意。我不明白为什么-我认为这是开发人员/设计的选择。 问题答案: 表示接

  • 问题内容: 我被问到一个问题,我想在这里让我的答案复习。 问:在哪种情况下,扩展抽象类而不是实现接口更合适? 答:如果我们使用模板方法设计模式。 我对么 ? 很抱歉,如果我不能清楚地说明问题。 我知道抽象类和接口之间的基本区别。 1)在要求如此的情况下使用抽象类,即我们需要为特定操作(实现方法)在每个子类中实现相同的功能,而为某些其他操作(仅方法签名)实现不同的功能 2)如果需要使签名相同(且实现