请问个类封装的问题

leetow2006 2019-08-09 08:32:54
封装能够实现“信息隐蔽”,把不需要让外界知道的信息隐藏起来,也就是说属性是私有的。
但是我们知道我们可以通过方法对这些私有的属性进行设置或获取,那不就是外界也能
知道这些私有属性吗?即使不能直接通过"对象.属性"进行设置或获取,我们还是可以通过
方法完成同样的工作,请问这样的封装有什么意义吗?为什么还需要封装呢?
...全文
1510 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
坎艺 2019-09-05
  • 打赏
  • 举报
回复
各人理解,有规范编程的意思,写代码的时候都是考虑谁谁谁点他要干什么。而不需要考虑他有什么属性。你一get就能看到你能get的都有什么,同理set。面向对象和面向过程都说是思想的区别。思想嘛,不是说谁对谁错,是大家思考问题的方式不一样
xharvard 2019-08-18
  • 打赏
  • 举报
回复
封装,个人理解就是为了保护类内部的数据不受外界的干扰。而且并不针对set/get访问器。比如有个状态变量设为private,取值只能是1,2,3。对外提供了几个public方法可以设置/修改这个状态。这个时候外部使用者就只能通过这几个public方法来设置/修改状态,类作者可以很好的控制状态变量的取值。如果把状态变量放开为public的话,外部使用者就可以随意更改值,比如赋值10,那整个类的逻辑就会全部错乱了。
qq_35151346 2019-08-18
  • 打赏
  • 举报
回复
封装的意义。我们不需要外界做的操作会把它屏蔽掉。比如某一个字段。我们只想要外部读操作。并不想让外部进行写操作。这时候我们只需要提供get方法。而不用提高set方法。即达到了我们的目的。外部只能读。如果没有这一层封装。直接提高一个共有的字段。外部既能读也能写。如果是私有字段。外部什么都不能做。封装还有一种体现在接口处。所谓封装,其实并不是完全的封闭自己,那样没任何意义,封装只是我们只需要提供外界的最小需求。至于其他并不一定需要的权限我们就可以私有封闭起来。
CodeManBill 2019-08-18
  • 打赏
  • 举报
回复
引用 30 楼 CodeManBill的回复:
静态构造函数可以了解一下
不需要知道对象的构造方式。隐藏了信息
CodeManBill 2019-08-18
  • 打赏
  • 举报
回复
静态构造函数可以了解一下
杨启宣 2019-08-17
  • 打赏
  • 举报
回复
其实如果你真的封装了 其实还可以用反射中的 暴力反射进行获取
研究猿小刘 2019-08-17
  • 打赏
  • 举报
回复
安全是相对于程序而言私有的private可以避免同名冲突,不是对于外界的人来说,因为即使用了private也是可以用反射机制在外界获取到的
研究猿小刘 2019-08-17
  • 打赏
  • 举报
回复
封装的目的是为了让不同层次的程序之间有个界限,防止同名变量之间的冲突,其次,才是为了安全考虑,因为即便加了private关键字,在外部也是有办法获取到的,例如用反射就能获取到
月上小楼 2019-08-17
  • 打赏
  • 举报
回复
就好像你在屋里工作,不想别打扰,就把门锁起来了,没有这个门钥匙的人是无法开门的(自我理解哦)
EBABEFAC 2019-08-16
  • 打赏
  • 举报
回复
可以对对象访问进行控制,也可以降低耦合,有时候还是需要自己理解。除了常量会直接打交道外,大部分数据都需要通过对象对外暴露的行为来操作的,比如查和写,你提供了我就能查和写,不提供你也只能干着急,这些方法就是一个个门,一个个不同的入口
伊航 2019-08-15
  • 打赏
  • 举报
回复
外部方法呢,只能得到你需要知道的信息,而不是类内部信息,两者是不一样的。
zhou_zhou888 2019-08-14
  • 打赏
  • 举报
回复
都是高科技啊!一下子感觉自己落伍了!
我有两颗糖 2019-08-14
  • 打赏
  • 举报
回复
封装是为了不让外界直接使用类私有对象和成员函数,私有成员函数和数据成员需要在public函数内部进行调用或修改,有一些数据和函数不能随便调用,比如辅助函数或者很关键的内容,如果随便修改,就容易出问题,也不利于维护,而进行封装就指定了外界可以使用哪些,哪些只有类对象能够调用
maradona1984 2019-08-14
  • 打赏
  • 举报
回复
封装并非是让人获取不到,而是告诉调用者一种意图,这个方法/属性不公开,你可以通过各种方式调用到,但出了问题是不管的
码农麒麟 2019-08-13
  • 打赏
  • 举报
回复
比如说一个读写文件的操作,我希望达到在创建这个对象的时候通过构造函数中传入的文件路径,进行读取数据。此时就可以用到封装,因为读文件和进行部分处理是在创建这个对象时执行的,也就是说在构造函数里要有类似于inputstream这样类似的操作,而读文件这个过程你不希望调用你这个类的人知道,所以读文件的方法就可以声明成private,只能够在类内调用
weixin_38639937 2019-08-13
  • 打赏
  • 举报
回复
public string Id {get; private set;}
软件老王 2019-08-13
  • 打赏
  • 举报
回复
入口统一,那些可以设置,那些不可以设置,指定固定的方法
xxx355200 2019-08-13
  • 打赏
  • 举报
回复
如果是你一个人开发,全部public都没问题。如果有别人参与开发,就需要private,各自new各自的,不会相互影响。
zspmsir 2019-08-12
  • 打赏
  • 举报
回复
如果不想外界获取私有属性,可以把私有属性的set和get方法删除掉啊,决定权在你
qq_39936465 2019-08-12
  • 打赏
  • 举报
回复
引用 14 楼 leetow2006 的回复:
看了网友的回帖,感觉“信息隐蔽”主要是指在方法内部,按照要求对私有属性进行处理,是不是这个意思?
可以想象为一个加工车间,set就是加入原材料,get就是得到成品,但是车间内部到底发生了什么外部人员是不知道的,外部人员是不能改变生产进程的,这个就是封装。如果不设置私有属性,任何过程中都有可能受到外部影响,从而影响到最终的结果。 这样就做到简单内外分离,增强程序的耦合性。
加载更多回复(14)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧