怎么理解封装啊? 把成员变量private了,但是方法却是public的,不是一样可以被外部类调用并篡改吗?初学不懂,请高手点拨几下。最好能写出体现封装好处的代码,对比着写并打上注释,谢啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 封装是为了屏蔽实现,就是我们不需要这个功能是怎样实现的,只要我们知道它的功能,能够干什么,我们直接拿来用就可以了,你说的private修饰成员变量,你可以这样理解,就是你自己有一个年龄,而你的年龄不想让任何人都知道,如果想要知道你的名字,那么就要通过一个方法,而这个方法你可以想成是你是否认识这个人,而这个认识你的方法你不需要管它是怎去实现的。本人愚见。 我的理解是①设立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。希望对你理解有帮助-。- 字段设为私有,是满足面向对象中封装性,一个类不建议允许直接获取到另一个类的字段,同时也不建议直接把自身字段暴露给另一个类,本质上其实是为了隐藏具体实现,同时,用get或者set方法来获取或者设置的话,可以在该方法中添加一些简单的验证逻辑,比方说有个学生类,其中有个年龄字段,如果直接做成public的话,那么这个年龄字段可以设置为负值,但是你做成了set方法的时候,你调用set设置年龄,那么你可以在set方法中去对为负数的年龄进行验证处理 2楼说出了一部分.还有一个原因就是只暴露设值函数方便调试维护,在eclipse这样的工具中,我只要ctrl+shift+G就可以查看setAge方法在哪被调用到,从而可以方便跟踪问题,而直接暴露字段,客户端可以肆意操作,如*=,+,-,*,/,=,++等操作,完全查询出有哪些地方修改了该字段是比较困难的. 2楼说的很好,基本上是这个样子,public被别人调用,而方法中进行对内部的成员赋值的一种手段,比如不能超过哪些值等等的判断,从而其他地方调用那么也只能遵守封装后的方法,没有办法赋予封装后的类里面成员的一些特殊值. 方法不一定都是public的得看你实际的需要来确定,看你想对外暴漏什么信息,允许“客户”知道什么,可以修改什么。 方法不一定都是public的得看你实际的需要来确定,看你想对外暴漏什么信息,允许“客户”知道什么,可以修改什么。 关于 concat链接字符串 为何编译不通过(有关任意个数参数的方法) 关于this AOP-新一代的java语言(java能出个超豪华的IDE吗) JAVA多线程的问题,请兄弟们帮忙看看。 如何让一个JTree节点设置为选中 Iterator的问题? 请教:如何通过socket传送一个数据文件? JFRAME大小设置问題 同一个页面中的参数值传递 线程同步问题,分析下程序运行结果 tomcat连mysql报这个错是怎么回事?
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。希望对你理解有帮助-。-
还有一个原因就是只暴露设值函数方便调试维护,在eclipse这样的工具中,我只要ctrl+shift+G就可以查看setAge方法在哪被调用到,从而可以方便跟踪问题,而直接暴露字段,客户端可以肆意操作,如*=,+,-,*,/,=,++等操作,完全查询出有哪些地方修改了该字段是比较困难的.