java encapsulation_Java Encapsulation vs Abstraction

你们中的大多数人都同意封装和抽象在一起会带来很多混乱。 大多数博客只会进一步增加混乱。 让我们解决这个难题。

在上一篇文章“ Understanding abstraction in java ”之后,我开始撰写这篇文章。 我的目标是了解Java中的封装及其与抽象的关系。 一开始,我就开始陷入前所未有的混乱之中。 在浏览了多个小时并阅读了一些写得很好以及令人困惑的博客条目之后,我能够做出一些清晰的理解。 跟随我的足迹

Encapsulation in simple words

将类中的数据和方法与实现隐藏(通过访问控制)结合起来通常称为封装。 结果是具有特征和行为的数据类型。 封装本质上既有信息隐藏又有实现隐藏。

Encapsulation in Detail

我在某处阅读:“ 无论发生什么变化,都将其封装 ”。 它被引用为著名的设计原则。 因此,在任何类中,运行时中的数据都可能发生更改,将来的发行版中可能会更改实现。 因此,封装既适用于数据,也适用于实现。

访问控制或实现隐藏将边界置于数据类型或类中,这有两个重要原因。 首先是建立客户端程序员可以使用和不能使用的功能。 这直接导致了第二个原因,那就是将接口与实现分开。

如果您确定客户端程序员除了将消息发送到公共接口之外什么也不能做,那么您可以随意更改不公开的任何内容(例如,程序包访问,受保护或私有),而不会破坏客户端代码。 封装可以帮助您实现这一保证。

Encapsulation vs Abstraction

如果您浏览了my last post一篇my last post ,您将看到抽象本质上是一个主意,这有助于设置准则。 封装是我们实现所需抽象的机制。

简而言之,从OOAD的角度来看:Abstraction is more about ' What ' a class can do. [ Idea ]

Encapsulation is more about ' How ' to achieve that functionality. [ Implementation ]

我在很多博客上都看到了与此理论相矛盾的地方。 因此,如果您也不同意这一点,请忍受我。 另外,我将要求您对与主题相关的想法发表评论。 我会很乐意尝试联系或否定。

展望未来,我将以我们众所周知的HashMap类为例。 此类负责存储键值对,基于键进行搜索并执行更多操作。 从外部,客户端代码仅知道方法名称及其行为。 它调用了这些方法,并快乐地生活着。 这实际上是抽象准则。 抽象表示,客户端代码应调用添加键值对的方法,基于键检索值的方法等。 应该怎么做? 不是抽象业务。

当您开始编写实际代码时,封装就到了。 您编写HashMap.Entry类,并创建类型Entry[]变量table 。 然后,将所有此类内容声明为私有,并仅允许公众访问put()和get()方法等。这实际上是封装。 A realization of your desired abstraction 。

我希望您对java encapsulation有更多的了解,它difference with abstraction 。

Happy learning !!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值