怎么理解封装啊?

QQ331983361 2012-08-04 09:38:26
把成员变量private了,但是方法却是public的,不是一样可以被外部类调用并篡改吗?初学不懂,请高手点拨几下。最好能写出体现封装好处的代码,对比着写并打上注释,谢啦
...全文
282 15 打赏 收藏 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Man_Jiang 2012-08-09
  • 打赏
  • 举报
回复
增加了一定的安全性了!
  • 打赏
  • 举报
回复
说说是简单,但真要理解,需要数年编写代码的经验
lychd0902 2012-08-09
  • 打赏
  • 举报
回复
2楼 顶
sffx123 2012-08-09
  • 打赏
  • 举报
回复
方法不一定都是public的得看你实际的需要来确定,看你想对外暴漏什么信息,允许“客户”知道什么,可以修改什么。
sffx123 2012-08-09
  • 打赏
  • 举报
回复
方法不一定都是public的得看你实际的需要来确定,看你想对外暴漏什么信息,允许“客户”知道什么,可以修改什么。
leojing888 2012-08-09
  • 打赏
  • 举报
回复
2楼说的很好,基本上是这个样子,public被别人调用,而方法中进行对内部的成员赋值的一种手段,比如不能超过哪些值等等的判断,从而其他地方调用那么也只能遵守封装后的方法,没有办法赋予封装后的类里面成员的一些特殊值.
自闭小哈 2012-08-09
  • 打赏
  • 举报
回复
其实就是只暴露合法的操作给用户
iamzep 2012-08-09
  • 打赏
  • 举报
回复
你有一个玩具,你可以玩他的各种功能,但是呢,玩具厂不想让你去动玩具的轴承,里面的电路啊什么的,就把他包起来。
BadPattern 2012-08-09
  • 打赏
  • 举报
回复
2楼说出了一部分.
还有一个原因就是只暴露设值函数方便调试维护,在eclipse这样的工具中,我只要ctrl+shift+G就可以查看setAge方法在哪被调用到,从而可以方便跟踪问题,而直接暴露字段,客户端可以肆意操作,如*=,+,-,*,/,=,++等操作,完全查询出有哪些地方修改了该字段是比较困难的.
QQ331983361 2012-08-05
  • 打赏
  • 举报
回复
嗯我明白了谢谢
老紫竹 2012-08-05
  • 打赏
  • 举报
回复
2楼解释的很好。 就是方法可以做一些额外的操作,而这个改变不影响调用方,它继续调用方法,但内部实现已经修改了。 解耦合。
haiercs 2012-08-05
  • 打赏
  • 举报
回复
字段设为私有,是满足面向对象中封装性,一个类不建议允许直接获取到另一个类的字段,同时也不建议直接把自身字段暴露给另一个类,本质上其实是为了隐藏具体实现,同时,用get或者set方法来获取或者设置的话,可以在该方法中添加一些简单的验证逻辑,比方说有个学生类,其中有个年龄字段,如果直接做成public的话,那么这个年龄字段可以设置为负值,但是你做成了set方法的时候,你调用set设置年龄,那么你可以在set方法中去对为负数的年龄进行验证处理
leaftogodown 2012-08-04
  • 打赏
  • 举报
回复
我的理解是①设立public方法,一定是此成员变量需要被外界调用的。②此成员变量不希望被任意修改,所以设成了private。其实并不矛盾,与直接将成员变量public不同,这种方法可以通过修改方法来限制外部的修改
public class Person {
private int age;

public int getAge() {
return age;
}

public void setAge(int age) {
if(age < 0 || age > 1000)
throw new RuntimeException("年齡異常");
this.age = age;
}
}
通过对age的判断,来决定是否让外界修改age。希望对你理解有帮助-。-
cjh_tostring 2012-08-04
  • 打赏
  • 举报
回复
封装是为了屏蔽实现,就是我们不需要这个功能是怎样实现的,只要我们知道它的功能,能够干什么,我们直接拿来用就可以了,你说的private修饰成员变量,你可以这样理解,就是你自己有一个年龄,而你的年龄不想让任何人都知道,如果想要知道你的名字,那么就要通过一个方法,而这个方法你可以想成是你是否认识这个人,而这个认识你的方法你不需要管它是怎去实现的。本人愚见。

62,620

社区成员

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

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