日期:2014-05-20  浏览次数:20691 次

讨论,为什么很多人都不定义public变量? 而要另外写get,set函数来设置private变量的值
我发现很多程序,都喜欢在class中定义private变量,但又另外提供get,set,函数.  
我认为这样写太麻烦,还不用直接定义public变量.   访问的时候直接   class实例.变量名,   请问这样做好吗?




------解决方案--------------------
通过bean方法来改变变量的值比较安全,这样你可以很方便的知道这个值在什么地方被改变了。而且在改变的时候加上其他处理,如print也方便

------解决方案--------------------
这就是JAVA的特点之一.封装!
------解决方案--------------------
你觉得怎么样好就怎么用,有时候一个问题不理解的话可以按自己的思路走,可是代价也要自己承受,不能让公司给你交纳太多的培养费用
------解决方案--------------------
这样不好,楼主需要查一下JavaBean,而且,这样getX/setX其实不麻烦,可以用IDE自动生成,100个也就几秒钟
------解决方案--------------------
Give you an example. Let 's say you have class A and B as follows.
-----------------------------------------------------
public class A {
public int numberA;
}

public class B {
public A a;
public int numberB;

public B() {
a = new A();
numberB = 0;
}

public int someMethod() {
return numberB / a.numberA;
}
}
------------------------------------------

Then someone else is using your compiled class files.
-----------------------------------------------------
public class C {
public static void main(String[] args) {
B b = new B();
b.numberB = 10;
b.a.numberA = 0;
b.someMethod();
}
}
-------------------------------------------

Then this guy complain that your program has problems. What can you do?
------解决方案--------------------
安全性和编码规范
------解决方案--------------------
定义了Public变量,就跟让你把钱拿出来放到大家面前,---想怎么花就怎么花
------解决方案--------------------
规范化, 一些组件调用时会通过设置器(setXXX) 来设定变量值.
------解决方案--------------------
1.这个是有好处地,虽然好处说不太清楚;(但是,请乖乖的照做~听姐姐话,有糖吃:P)
2.IDE可以帮你生成的,一点都不麻烦地!!(选中变量,右键选source--> Generate Getters and Setters...)
------解决方案--------------------
封装特性。。
java的特点。。
------解决方案--------------------
大家都说封装,
我感觉,这主要是java的风格吧.类库里面基本上没有直接调用一个共有变量的.全都是用get/set
C#的类库里面多数都是使用共有变量来存取的.可能是因为两种语言的访问器不同的原因吧.
------解决方案--------------------
应该是差不多,只是规范性的问题.
------解决方案--------------------
1.0的时候,很多都是public,后来sun都改成了get,set
------解决方案--------------------
get()和set()看你怎么用了,如果里面只放一个赋值语句的话,是和public变量没什么区别。
但是设想,你有一个Person类代表一个人,Person有一个char类型的sex字段表示性别,理论上,sex只接受两个值, 'M '和 'F ',但如果你把sex字段设为public,你很难限制你的用户只给它赋 'M '或 'F '值。将sex设为private,再用setSex()来设置性别,你就完全可以控制这种行为了。
------解决方案--------------------
看一下这个情况吧。
class A
{
public string sex;
}
class B
{
private string sex;
public string getSex(){return this.sex};
public void setSex(string sex)
{
if(sex.equals( "man ") || sex.equals( "female "))
this.sex=sex;
else