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

关于private用法的迷惑,请指点迷津,谢谢!
我才接触java没几天,现在刚看到private的用法,有点想不明白,很多资料上都说,把属性定义成private,然后在定义一个set,一个get方法,可以达到封装的效果,可以防止外界直接访问,也就是在别的类中不能用 对象.属性的方式直接访问,而需要用对象.getXX方法访问,可是这2种访问有什么区别吗,我怎么感觉效果都一样呢,还有在单列设计模式中,把构造方法私有化,也就是在别的类中不能用new来创建该类的对象,而需要调用一个static方法返回一个该类的对象,这样做又有什么好处呢,不都是创建一个对象吗? 我真的搞不明白,private这里面有什么好处,我只是个初学者,往解答者能够详细一点,不胜感激!

------解决方案--------------------
先说那个单例模式,关于设计模式我本人是很迷糊,说说自己的一点理解,单例模式顾名思义就是系统中只能有一个该类对象,把构造函数私有化,即只能在该类的内部区new一个该对象,在使用一个静态方法,则就可以让这个方法成为类方法,即与该类的具体对象无关,而且在系统中,也只可能有一个该类的对象,建议LZ多看一下访问修饰符和static方面的资料
再说private,它实现了数据的封装,pricate的成员只有在该类的内部才能被访问。用thinking in java里的话说,“提供get/set方法以读取和改变数值,对OOP而言这是最优雅的方式,而且这也是javaBeans的基本原理”
------解决方案--------------------
private作用是封装

别人看不到你的实现
比如

public String getValue(){
return interceptor();
}

private String interceptor(){
....
}

外界虽然能调用getValue,但不知道interceptor是如何实现的

static变量初始化时直接建立在内存上,不需要实例化一个类才能得到
------解决方案--------------------
private修饰是有道理的 比如你的一个属性a被修饰成了private 如果你不想别人修改你的a属性而只能读取,那么你可以提供一个private 的setter方法和一个public的getter方法 这样子封装就随你便,再说了就是面向对象是提倡用对象直接操作属性的,属性的改变一般要通过方法来实现,直接改变不符合面向对象原则 

单例模式中提供的static方法每次返回的都是同一个实例,儿一般类可以随便创建实例,每个都可以不同
------解决方案--------------------
上面说掉了一个字 面向对象不提倡对象直接操作属性
------解决方案--------------------
这么说吧,用setXXX的方式可以在 setXXX()方法里设置变量的赋值规则。而使用 对象.变量 的方式赋值是没有这种功能的……
这样就能够保护数据不被违规访问
------解决方案--------------------
private修饰的变量具有良好的封装效果,也就是说只能通过类提供的public方法去访问,而不能直接通过实例本身去访问。
Java code

class Num{
   private int a;
   public int b;

   public int getA(){
      return this.a;
   }