记者:什么是封装,你如何实现它在Java中?
我:封装是隐藏从客户信息的机制。 这些信息可以是数据或实施或算法。 我们实现这一目标使用访问修饰符。
记者:这是数据隐藏。 我们如何在Java中实现封装?
我 :uummmm
具体问题:除了“访问修饰符”,什么是在Java中实现封装的方式吗?
记者:什么是封装,你如何实现它在Java中?
我:封装是隐藏从客户信息的机制。 这些信息可以是数据或实施或算法。 我们实现这一目标使用访问修饰符。
记者:这是数据隐藏。 我们如何在Java中实现封装?
我 :uummmm
具体问题:除了“访问修饰符”,什么是在Java中实现封装的方式吗?
更一般地封装简单地指捆绑与该数据的操作的数据(例如对象的)。 所以,你有一个类封装数据- 场 -随着操纵该数据的方法 。
但封装有时也以同样的方式为你的答案中使用,而事实上,捆绑数据和方法的要点之一是要隐藏实现。
我想一个更好的答案并非只是使用的方法,使各个领域的私属:使用接口。 通过这种方式,对象上的操作完全基于接口的合同,并且不以任何方式依赖于用于内部实施该合同的字段或辅助方法。
一般来说封装器件捆绑类似的项目,就这么简单。
例如,拿一个Student
类,我们将让学生实例变量和作用于这些实例变量@一个地方的行为/方法。
它为什么重要? 我们不希望我们的代码散落在我们的代码库各地。
要是让说,我们需要做出改变,然后我们需要在所有的地方找到的变种(的改变)。 通过捆绑类似的项目,我们只是避免这种情况下,它也有助于使我们的捆绑的代码更集中。
它只是提供了一种方法来保护来自外界的数据。 它的意思是,让我们说,如果我做了我的实例变量公开,那么任何人都可以改变它的状态。 但是,如果我们让我们的实例变量私有/保护,那么其实我们都制约以外的实体作出更改。
现在问题出现了,在哪些方面是我们使我们的变量保护?
同样,我们要明白, 封装就是我们需要把我们的类似物品的容器。
它只是像一个黑盒子外面的世界。 外面的世界(我的意思是说客户/消费者:使用我们的Student
类)不知道的内部细节/实施细则Student
类,实际上他们不应该关心类的内部细节/实施细则。 他们只是想一些方法/ API,以便他们可以在客户端应用程序中使用它们。
所以我的观点是所有学生的相关行为/变量放在我们呼吁它作为一类黑盒 。 现在,它的最高阶级哪些类的元素应该被隐藏的设计师,什么不应该从外界被隐藏。
现在回来的问题在Java中:我们正在使我们的私有变量这意味着他们是一流的protected.If我们希望我们的实例变量是整个包,那么访问它们封装保护。 通过了项目,他们是公开的。 所以我的意思是说是隐藏你需要某种容器,你会把你的数据,并且相对于集装箱隐藏数据。
所以我觉得信息隐藏也不是没有可能封装 。 不把它在某种形式的容器不能隐藏您的数据。 再次声明,我提醒你,我把这个在面向对象的语言环境。
但是,是的封装可以在不隐藏您的数据。 把所有的事情公开,你可以看到的影响。
封装 :以一个胶囊的例子。 如果你打开它,它包含了很多在它的成分。 面向对象编程的封装也是这样。 正如其名称所暗示的 “ 封装装置以封装(使胶囊)中的所有数据成员,属性和一个单个胶囊内的相应方法。
你怎么做:比方说你犯了一个名为“汽车”类。 现车有颜色的价格和型号。 这些属性,它有一个run方法。 所以在这里你已经封装所有这些属性和一个名为“驾驶”车辆的方法。 当你创建像这样的车的一个实例
Car myCar = new Car();
您可以访问使用myCar变量汽车的所有属性。
“ 数据隐藏 ”:数据隐藏使用访问修饰符在Java中控制。 要访问您使用存取数据成员,同时修改你用“ 改变者 ”的数据。 Java的本身不提供存取函数,你自己(getter和setter)创建它们。 虽然C#提供属性这么做。
我不想这样做,但是,从维基百科 :
在编程语言中,封装用于指两种相关但不同的概念之一,有时它们的组合:
- 语言机制,限制对某些对象的组件的访问。
- 一种语言构成便于与所述方法(或其他功能)的数据的捆扎对数据进行操作
你的解释是沿着第一个概念的线条更,面试官在寻找第二的东西。
数据封装是指保持所有相关的属性和方法到单个实体的机制。
例如 :汽车。 它使方向盘,轮胎,引擎和所有相关的东西进入被称为一个集体的实体Car
。
在编程语言的封装与类实现。 类包含的所有属性和相关方法one single entity
,旨在做一个特定的任务。
数据隐藏是指对用户隐藏不重要的细节 ,并让他只有相关数据。
例如 :当我们按下刹车或油门的汽车,我们不知道发生了什么幕后( 如何它的速度增加或如何其施加制动到轮胎)。 我们所知道的是,我们有刹车和加速器执行期望的结果。
在编程,这是与访问修饰符的帮助下完成。 私有成员不能从类外,只可访问 public
成员可供用户访问。 私有成员只能从类的成员 ,从而提供安全性方面的私有成员直接从类的外部评估访问。
问题出现误导,我怀疑任何人,但面试官可能可能回答这个问题,并有机会,他/她的回答可能是错的。 最重要的是,目前还不清楚是什么问题应该评估或发现。
不过,我给它一些思想和下面的是什么,我相信可能是我试图回答这个问题。
在Java中,封装是通过使用访问修饰符隐藏实现细节(即公有,保护,私有等)。 有了这些级别的可访问的您可以控制信息隐藏的水平。 较少限制的水平,更昂贵的变化是当它发生和多个耦合的类是与其他从属类(即,用户类型,亚类)。
显然,封装不仅仅是隐藏状态的更多。 在Java中,你可以隐藏所有的类和接口以及它们的状态和行为,由此,隐藏整个API的实现细节。
例如,该方法Arrays.asList()
返回一个List
的实现,但我们不关心是什么实现,只要它满足List
公共接口,对不对? 实施可以在未来被改变,而不会影响我们,该方法的用户,但实际执行是从我们隐藏。
到这一点,它会出现,就好像封装从一种编程语言来隐藏细节的能力完全依赖,因此,它不能没有访问修饰符来实现,对不对?
但是,如何像Python语言实现封装时,它没有访问修饰符? 一切都公开在Python? 这是否意味着封装是不可能的?
如果,按照惯例,我们定义组件的公共接口,然后只能通过他们的公共接口访问对象的状态和行为? 显然,为此我们需要抽象清醒的认识我们的问题域以及如何将这些都应该由我们的用户消耗。
对我来说,它看起来好像面试问题的目的是评估封装为更广泛的概念,一个依赖于非常清晰的抽象的定义,而不仅仅是作为副产物的语言特性就像访问修饰符。
这就是为什么,在我看来,要真正理解封装,首先必须了解抽象。
想想,例如,在抽象的概念车的水平。 汽车是在其内部实现复杂。 他们有几个子系统,如传输系统,刹车系统,燃料系统等。
然而,我们已经简化了抽象,我们通过他们的抽象的公共接口与世界上所有的汽车互动。 我们知道,所有的汽车有一个方向盘,通过它我们控制方向,他们有,当你按下它,你加速的汽车,控制速度的踏板,而另一个,当你按下它,你让它停下来,和你有一个齿轮棒可以让你走的向前向后你控制。 这些特点构成了汽车抽象的公共接口 。 早晨,您可以驾驶的轿车,然后把它弄出来,并驱动SUV下午,就好像是同样的事情。
这并不是说你不能打开引擎盖,看看它是如何工作。 然而,我们很少知道如何将所有这些基本功能都在引擎盖下实现的细节,而事实是,我们并不需要知道的细节,以驾驶汽车。 所有这些东西都是车下的抽象封装。 我们只需要知道抽象的公共接口。
想的时候,汽车没有一个液压定向系统。 有一天,汽车制造商发明了它,他们决定它把它放在汽车从那里。 不过,这并没有改变在用户那里进行互动的方式。 至多,有经验的用户在使用定向系统的改进。 因为汽车的内部实现了封装像这样的改变是可能的。
这清楚地表明,通过隐藏的定向系统是如何实施的细节 ,他们可以安全地改变它 ,而不会影响汽车的公共接口,相应地,在不影响用户与互动的方式。
现在,认为汽车制造商决定把以下的车油箱盖,而不是在其一个侧面。 你去购买这些新车型之一,当你用完了气体的你去加油站,你没有找到油箱盖。 突然,你知道的是以下的车,但你不能与气体泵软管达到它。 现在,我们已经打破了公共接口的合同,因此,整个世界破裂,它分崩离析,因为事情没有工作,预计的方式。 像这样的改变将花费数百万美元。 我们需要改变这一切气泵世界。 当我们破坏了封装,我们必须付出一定的代价。
所以,你可以看到,封装的目标是尽量减少相互依存和促进变革 。 您可以通过最小化的实现细节曝光最大化封装。 一类的状态,只应通过公共接口来访问。
封装的好处是改变的事情,而不影响其用户的能力 。
我们可以说,这个终极目标取决于仔细的规划和设计。 在Java中,访问修饰符是一种把这些想法生活,但在语言,其中该功能不存在,同样可以实现封装。
在此类中,属性和行为被放置在一起。 封装意味着,当你创建一个类,这本身就意味着你意识到封装原则。 由于数据和行为被封装进级。 因此,数据隐藏是长期的重要组成部分 - 封装。 这意味着该对象的接入点。
我看到了很多的讨论已经完成,只是从我的理解简单化:
封装确保对象的行为只能通过其API的影响。 它让我们控制多少改变一个对象将通过确保有不相关的components.Access的修饰符之间没有意外的依赖性可以用来实现封装影响系统的其他部分。
信息隐藏由于隐藏的对象是如何实现它的API的抽象背后的功能。 它让我们忽略较低级别的细节是无关手头的任务具有更高的抽象工作。 抽象的设计水平可以用来实现数据隐藏。
封装的最简单的定义是“结合的数据和操作数据转换成一个单一的单元码”,从而使数据不能直接由外界访问。
在结构如c数据语言是在块的开始声明和使用直接,公开访问的(任何汤姆,迪克和哈里可以访问数据)。 数据隐藏是直接和公开限制为任何汤姆迪克和哈里数据访问的概念。
封装是实现数据隐藏的方式之一。 您可以通过将数据和功能一起(封装)实现数据隐藏。
你在JAVA如何实现的,看不到任何的getter(),二传()函数中的JAVA例子。 勾选此
如何getter和setter工作?
封装:封装是OOPS的支柱之一,也是超集其他两个方面,数据隐藏和抽象。 (数据隐藏,因为这个词是指..数据只能保存在变量中。要隐藏来自外部世界,我们用数据隐藏的概念数据公共,私有,保护这些都向我们提供数据隐藏三种访问修饰符,默认为有限打包。受保护的限制为继承的类。)**私有变量只能内部类,这意味着,如果有一个内部类可访问的,也有私有变量可以被直接调用。 只有静态内部类可以调用静态变量。
现在来抽象(意为无形)。 抽象也被视为过程中隐藏用户的实施,并提供了最终的结果。 例如:我们有有“重量”财产的人的班级。 此属性是相当棘手的,因为我们不能接受低于0重量的人。 此外,我们不能接受超过500公斤。 所以隐藏实现这些将会在setter方法。 这件事情隐藏实现细节是抽象。
**和IE使物体私下和setter和getter实现逻辑的完整的包称为封装。
封装指结合数据成员,并在单个单元的方法(行为),并提供所要求多用户容易地可以说[封装=数据隐藏+抽象]尽可能多的信息。
类被完全包封在Java元素
数据隐藏装置宣告数据变量为私有,以未经授权的访问,但如果你给了验证一些公共setter和getter方法。
由来自外部的类成员的直接访问隐藏其数据和仅提供通过公开访问的setter和getter方法通过适当的验证它被称为封装接入定义一个类的过程。
我看到它的方式, 封装指的结合数据和方法调用的类的单个单元的想法。 然而,存在结合数据和方法的两个主要标准 。 其中之一是信息隐藏,只是不是唯一的一个。 要完全简明我要说的两个主要标准是
的结合的数据成员和相应的方法在单个单元中的方法,不过是encapuslation。
封装=数据隐藏+抽象
数据隐藏意味着我们在类内的数据提供安全保障。
抽象意味着通过定义成员函数隐藏的代码。
封装是抽象和数据隐藏的组合,意味着我们包装与该数据相关联的数据和代码。 对于前bean类
class student {
private int age; // Data Hiding
public setAge(){} // Abstraction
public getAge(){} // Abstraction
}
学生类封装。
封装=数据隐藏+抽象
维基百科
封装封装是一种面向对象的编程概念结合操纵该数据的数据和功能一起,并且,保持二者不受外界干扰和误用的安全。 导致数据隐藏的重要OOP概念数据封装。
如果一个类不允许调用代码访问内部的对象数据,并且允许通过方法仅访问,这是抽象化的信息的一个强形式藏匿称为封装。 一些语言(Java,例如)让类执行访问限制明确,例如表示内部数据与私人关键字和指定专供代码的类境外使用public关键字的方法。 方法也可以设计的公共,私有或中间水平,如保护的(不同的类的,其允许从相同类及其子类访问,而不是对象)。 在其他语言(如Python)这仅仅是按照惯例执行(例如,私有方法可能有一个以下划线开头的名称)。 封装防止外部代码被关注的对象的内部工作。 这有利于代码重构,例如允许类改变该类的对象如何表示他们的数据的作者在内部不改变任何外部代码(只要“公共”的方法调用的工作方式相同)。 它还鼓励程序员把所有的涉及同一类特定的数据集,从而组织它被其他程序员容易理解的代码。 封装是鼓励去耦的技术。
基本上数据封装是一种方法,而数据隐藏是一个技术。 在封装的数据可以是公共或私有,但在数据中隐藏的数据仅是私有的。 因此,数据隐藏使用封装,但它也使用不同的技术来保证仅允许授权访问数据。 希望能帮助到你!
抽象说,有什么需要与对象进行交互。
封装装置封装对象属性,状态和行为成单个逻辑单元称为类。
数据隐藏称,隐藏内部实现对象的指私有方法和属性,使用以维持其状态的对象。