什么叫做java封装_java – 什么是封装?

>封装是数据隐藏.通过使用private,protected和public,将数据打包到单个组件中.

>无论是什么变化都封装它.保护任何易于改变的东西.

这两个定义如何讨论相同的概念?

解决方法:

封装可能是最容易被误解的OOP概念.

封装不是数据隐藏!

“封装”来自“胶囊”.这意味着将事物放在一起,将它们关在一个包中,我们在这里讨论的“事物”是数据和功能.没有封装的编程意味着处理数据的函数在代码中的某处“浮动”,虽然它们处理数据甚至将特定类型作为输入,但它们与数据分离.

让我举一个例子而不是关注“公共”等等:如果你有一个处理复数的类,它有一个真实和想象的部分,你可以简单地定义它:

class complex {

double real;

double imaginary;

};

使用在C中使用的旧的预封装样式来获取此数字的绝对值,您将定义如下函数:

double absolute(double real, double imaginary);

这根本不会与班级联系起来!当然,您也可以定义一个将类复杂作为输入的函数,但它仍然是一个外部函数.因此,要使用它,您必须这样做:

complex A;

A.real = 1;

A.imaginary = -3;

并获得你必须调用的绝对值

absolute(A.real, A.imaginary);

相反,您可以使用封装并将数据和函数放在一起:

class complex {

double real;

double imaginary;

double absolute(); // inside the class, encapsulated into it!

};

然后获得绝对值,你只需要调用方法就好

A.absolute();

这根本不需要数据隐藏.优点是代码更易于管理,因为您可以清楚地看到所有相关的“事物”(即数据和功能)组合在一起,因此您可以一眼就知道您拥有的内容(数据)以及您可以使用的内容它(方法).

如果没有这个,信息隐藏是不可能的,因为这意味着你从外部限制对某些成员(私有成员)的访问,因此你必须在里面有一些方法,否则你将无法对你的数据做任何事情!

同时,信息隐藏有助于充分利用封装:如果人们可以从外部访问数据,那么让其他编码人员编写自己的(未封装的)代码来处理您的数据会有很大的危险,如果实现不完全兼容,至少会导致代码重复(即无用的努力)和不一致.相反,数据隐藏意味着每个人都必须使用所提供的公共方法访问私有数据,以便它们对每个人都是相同的.

因此,数据隐藏需要封装才有意义,同时数据隐藏有助于它.他们一起工作得很好,但他们不是一回事!

回到你的问题:鉴于此,定义1是错误的.而且,正如CommuSoft所指出的那样,并不是一个真正的定义,这是一个经验法则.我将补充一点,关于何时使用数据隐藏而不是封装是一个经验法则.

电子表示这可能是this question的重复.我认为值得注意的是,大多数答案都是错误的,包括最佳答案,它提供了一个实际上与封装相反的封装示例.

如果你想要外部引用,这里有两篇关于这个的文章:

Abstraction, Encapsulation, and Information Hiding(请注意,当他开始一个名为“ENCAPSULATION”的段落并引用了很多定义时,他只是试图表明围绕这个主题的混淆;这些定义是错误的,正如他稍后解释的那样!)来源:https://www.icode9.com/content-1-470651.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值