我考虑过要阅读有关抽象的内容,而阅读有关它的不同文章后,我感到非常困惑。

所以,这是我无法理解的问题:

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

  • 与解释的here不同。
  • 它们是相同的,只是像here解释的那样是不同的观点。
  • 最后一个是抽象类,用于实现类似于here的抽象。

  • 哪一个是正确的? 请举一个简单的例子。

    2)“抽象意味着隐藏不必要的细节。例如,专注于对象的工作而不是对象的工作。”

    这是正确的吗?

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

    那么,抽象在哪里呢?

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

    我是否可以区分它们?

    请使用示例或简单说明来解释/回答。

    谢谢!

    最佳答案

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

    例如:您的计算机可以通过多种不同的方式连接到本地网络(以太网,Wi-Fi,ATM,拨号调制解调器等),但是您的Web浏览器通常不必担心其中哪一种您可以随时使用,因为较低层的软件提供了浏览器可以依赖的通用抽象。因此,“连接到网络”是抽象,而以太网和Wi-Fi等是该抽象的实现。

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

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

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

    那么,抽象在哪里呢?

    该抽象适用于该类的客户端(用户)。当然需要实现。但是,例如,接受List<String>的代码不必担心传入的实例是ArrayList还是LinkedList,因为它们都实现了所需的抽象。

    即使同一位开发人员同时编写实现代码和客户代码,关注点的分离也可以使维护这两个部分更加容易。如果抽象定义明确,并且客户代码从不“窥探”实现细节,则实现和客户代码可以更加简单明了。 (即使“抽象”只是简单地表示为Javadoc而不是实际接口,也是如此)。

    08-04 15:11