gpt4 book ai didi

java - 隐藏实现细节是封装还是抽象?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:26 24 4
gpt4 key购买 nike

有些人将抽象定义为:

Abstraction is hiding the implementation details by providing a layer over the basic functionality.

对对象的用户隐藏实现细节不是封装的一部分吗?

假设Animal类有函数eat(),那么提供这个接口(interface)给对象的使用者是封装还是抽象?或者提供函数名使用是抽象,方法实现部分的隐藏是封装。

我真的很困惑,因为在很多地方它是抽象的,很多人说实现细节隐藏是封装?

在此SO question最佳答案:

abstraction = the object externally; encapsulation (achieved through information hiding) = the object internally.

那么这是否意味着对象接口(interface)暴露是抽象而数据隐藏在对象内部是封装?

最佳答案

Is hiding implementation detail Encapsulation or Abstraction?

抽象就是提供一个带有接口(interface)和抽象类的附加层。这一层(接口(interface)和抽象类)告诉我们需要做什么,而不是如何做。所以隐藏实现称为抽象。

理解抽象概念的最好例子是所有 J2EE/JMS 规范都为应用程序供应商提供抽象(通常是 interfaces),然后这些接口(interface)将由不同的供应商(如 Tomcat)实现/JBoss/Weblogic/IBM/etc..) 以及规范的实际定义/行为(称为实现)。

抽象只谈论需要做什么和实现说明应该如何完成。

抽象提供在运行时注入(inject)行为的能力(即多态性)。现在,以 Spring 框架(或实际上任何 DI 框架,如 Guice 等)为例,Spring DI 容器注入(inject)提供的 bean(通过 xml 或注释)实现对象 (实现) 在运行时给定接口(interface)类型(抽象)

So does this mean object interface exposure is abstraction and the data hiding inside object is encapsulation ?

是的,几乎可以,在 Java 中抽象可以使用 interfaces 或有时使用 Abstract classes (如 J2EE HttpServlet 等)来实现。 .

现在谈到封装,它就是为类/方法/字段提供/定义正确的访问级别(隐藏/保护类和类成员(member))。在 Java 中,可以使用访问修饰符(protected/private/public/etc..)来实现封装。

可以看看here了解更多关于 Java 中的抽象和 here用于覆盖(实现)和隐藏方法。

关于java - 隐藏实现细节是封装还是抽象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40452978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com