San*_*dal 48 java oop encapsulation software-design data-hiding
采访者:什么是封装,你如何用Java实现它?
我: 封装是一种隐藏客户端信息的机制.该信息可以是数据或实现或算法.我们使用访问修饰符来实现这一点.
采访者:这是数据隐藏.我们如何在Java中实现封装?
我:uummmm
具体问题:除了'Access Modifiers'之外,在Java中实现Encapsulation的方法是什么?
pb2*_*b2q 38
更一般地,封装仅指将数据(例如,对象)与对该数据的操作捆绑在一起.因此,您有一个封装数据的类 - 字段 - 以及操作该数据的方法.
但封装有时也以与答案相同的方式使用,实际上,捆绑数据和方法的一个要点是隐藏实现.
我想一个更好的答案,而不仅仅是使用方法并使所有字段都是私有的:使用接口.这样,对对象的操作纯粹基于接口契约,并且绝不依赖于用于在内部实现该契约的字段或辅助方法.
bha*_*atj 18
通常,封装意味着捆绑类似的项目,这很简单.
例如,在一个Student
类中,我们将学生实例变量和行为/方法作用于那些实例变量@一个地方.
为什么重要?我们不希望我们的代码分散在我们的代码库中.
如果说我们需要进行更改,那么我们需要在所有地方找到变体(变更).通过捆绑类似的项目,我们只是避免这种情况,它也有助于使我们的捆绑代码更集中.
它只是提供一种保护您的数据不受外界影响的方法.这意味着,假设我将我的实例变量公之于众,那么任何人都可以改变它的状态.但是,如果我们将实例变量设为private/protected,那么实际上我们正在限制外部实体对其进行更改.
现在问题出现了,我们在哪些方面使变量受到保护?
我们再次需要了解Encapsulation只是我们放置类似项目所需的容器.
它只是像外面世界的黑盒子一样.外界(我的意思是说客户/消费者:使用我们的Student
类)不知道类的内部细节/实现细节,Student
实际上他们不应该关心类的内部细节/实现细节.他们只是想要一些方法/ API,以便他们可以在客户端应用程序中使用它们.
所以我的观点是所有与学生相关的行为/变量都放在一个黑盒子里,我们把它称为一个类.现在,由类的设计者决定该类的元素应该被隐藏,什么不应该被外部世界隐藏.
现在回到Java中的问题:我们将变量设为私有,这意味着它们是受类保护的.如果我们希望我们的实例变量可以在整个包中访问,那么它们就受到包保护.通过项目他们是公开的.所以我的意思是隐藏数据,你需要某种容器,你可以放置数据并隐藏容器.
所以,如果没有封装,我觉得数据隐藏是不可能的.如果不将数据放入某种形式的容器中,则无法隐藏数据.我再次提醒你,我把它放在面向对象语言的上下文中.
但是可以在不隐藏数据的情况下进行封装.把所有的东西都公开,你可以看到影响.
小智 9
封装:以胶囊为例.如果你打开它,它含有很多成分.面向对象编程的封装也是这样的.顾名思义"封装意味着在一个封装内封装(制作一个封装)所有数据成员,属性和相应的方法.
你是怎么做到的:让我们说你做了一个名为"汽车"的课程.现在汽车有颜色价格和型号.这些是属性,它有一个run方法.所以在这里你已经封装了名为"Car"的车辆的所有这些属性和方法.当你像这样创建一个汽车实例时
Car myCar = new Car();
Run Code Online (Sandbox Code Playgroud)
您可以使用myCar变量访问Car的所有属性.
" 数据隐藏 ":使用访问修饰符在Java中控制数据隐藏.要访问数据成员,请使用ACCESSORS,同时修改使用" Mutators " 的数据.Java本身不提供访问器和更改器,您自己创建(getter和setter).虽然C#提供了这样做的属性.