有人将抽象定义为:
抽象通过在基本功能上提供一层来隐藏实现细节。
向对象的用户隐藏实现细节不是封装的一部分吗?
可以说Animal类具有函数eat(),那么为对象的用户提供此接口是封装还是抽象?或提供要使用的函数名称是抽象,而方法实现部分的隐藏是封装。
我真的很困惑,因为在很多地方它都是抽象的,很多人说实现细节隐藏是封装吗?
在这个问题的最高答案:
抽象=外部对象;封装(通过信息隐藏实现)=内部对象。
那么这是否意味着对象接口公开是抽象的,而隐藏在对象内部的数据是封装的呢?
是隐藏实现细节封装还是抽象?
抽象就是提供带有接口和抽象类的附加层。该层(接口和抽象类)告诉您需要做什么,但不告诉您如何做。因此,将隐藏实现称为抽象。
理解抽象的概念的最好的例子是,所有J2EE / JMS规范提供的抽象(典型地interfaces
)连接到应用程序供应商,然后这些接口将通过不同的供应商(如Tomcat / JBoss的/的Weblogic / IBM /等)来实现以及规范的实际定义/行为(称为实现)。
抽象只讨论需要做什么,而实现则告诉应该如何做。
抽象提供了在运行时注入行为的能力(即Polymorphism)。现在,以Spring框架(或实际上像Guice这样的任何DI框架)为例,Spring DI容器在运行时将提供的bean(通过xml或批注)实现对象 (实现) 注入给定的接口类型(抽象)。
那么这是否意味着对象接口公开是抽象的,而隐藏在对象内部的数据是封装的呢?
是的,几乎在Java中的抽象,可以使用达到interfaces
或有时使用Abstract classes
(如J2EE HttpServlet
,等等)。
现在进入封装,这就是为类/方法/字段提供/定义正确的访问级别(隐藏/保护类和类成员)。在Java中,胶囊化可以使用访问修饰符(来实现protected
/ private
/ public
/等。)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句