我是OOP的新手,我对封装有些怀疑。
“部分”和“弱”封装的区别是什么意思? java中的一个例子可以帮助我。
封装是指仅将数据放在像类一样的胶囊中,还是必须存在访问修饰符?
我读到封装意味着隐藏数据并将数据聚集在一起。
在这个例子中:
class A{
public int a;
public void foo(){}
}
以上代码是封装的例子吗?如果是,则外部世界不会隐藏任何内容,因为a
和foo
是公开的。此示例必须a
和foo
private
才能被视为封装吗?
答案 0 :(得分:0)
这是一个很好的解释https://mail.mozilla.org/pipermail/es-discuss/2010-December/012334.html
基本上,如果您正在实现一个Java库或API,那么您的目标就是强大的封装,以便用户无法访问他们不应该访问的内容。
强封装意味着没有人可以访问秘密内部变量,因为你有一个正确的继承heirachy并且所有这些东西都是隐藏的。
您的示例是非常弱的封装,因为变量a
是公共的。如果您的课程是API而且a
实际上是credit_card_details
,那么您将遇到大麻烦。
对于初学者,您可以将这些变量设置为私有,并使用getter和setter来访问它们。
总的来说,你需要一些抽象的东西来封装它。从OOP的角度来看,我听到封装的唯一另一件事就是简单地将现实世界对象捆绑到类中
答案 1 :(得分:0)
面向对象是关于消息的。如果您只能要求在对象内设置或获取值,则会封装这些值。访问它们的唯一方法是通过预定义的协议,即setter或getter或其他任何方法。 如果你有一个公共字段,它看起来没有封装,但你仍然没有变量,把它想象成一个默认的集合或得到。