Java访问控制private之我见

最近待业在家,遂有空重新读了thinking in Java这本书,发现工作了几年,对访问控制有了更深的理解,这里专谈private关键字,想了一个例子,以记录自己的理解。
访问控制的原因有二:
1.避免客户端程序员触及他们不应该触及的部分
2.允许库设计者改变类内部工作方式而不担心影响到客户端程序员
下面分别对这两点进行解释,请看下面的代码。



public class Person
{
private int age;

public void setAge(int age) throws Exception
{
if(!validateAge(age))
throw new IllegalArgumentException("Illegal age!");
this.age=age;
}
private boolean validateAge(int age)
{
if(age<0||age>200)
return false;
return true;
}
}


在上面这个类,有连个地方解释,一是age属性,二是validateAge方法。
先说age属性,如它是public,则会导致客户端程序员随意修改age的值,如果是多线程访问这个对象,还无法线程同步这个对象,这样是非常危险的,这个时候再想修改访问权限就是一个灾难。
再说validateAge方法,首先这个方法是对象内部的细节,不应该暴露给客户端程序员。
其次如果它是public,并且不在setAge方法里调用,而是让客户端程序员选择调用,这样不管注释文档写的多好,都把决定权留给客户端程序员。当想做一些改变比如去掉这个验证或者改变这个验证的接口,就会同样影响遍布整个系统。

所以设计一个类一定要想好它的对外接口是非常重要的。

你可能感兴趣的:(java)