类的成员访问的控制方式有:public, protected, default和private。
访问的含义:
例如有一个类test1,如果定义了另一个类test2,在test2中创建了test1的实例,如果此时需要在test1中用test2的成员变量或方法,那么便是访问了test2的成员。
例如:
public class test1
{
public int x;
public test1(){};
public void funtion(){};
}
public class test2
{
public void f()
{
test1 a = new test1();
a.x = 2;
a.function();
}
}
如此,我们便在类test2中访问了类test1的成员x和其成员方法function()。
public:
最不严格,任何类都可以该成员。
private:
最严格,只有本类可以访问该成员,其他情况如同一包内的类、子类等都无法访问。
通常情况下,把一些需要有限制的成员变量用private修饰,同时定义出该成员变量的public方法setter和getter,这样便可以该类的方法来访问其内部受保护的成员变量。
default:
同一包内的类可以访问该成员。
包内的类包括其子类,但是包外的类一律无法访问。
protected:
同一包内的类以及其子类可以访问。
这里需要说明,包内的类有两种,其他类和子类;子类也有两种,包内的和包外的,所以同一包内的类和子类其实是有交集的——包内的子类。
总结表格如下:
访问范围 | public | protected | default | Private |
同一个类 | 是 | 是 | 是 | 是 |
同一个包内 | 是 | 是 | 是 | 否 |
同一个包中的子类 | 是 | 是 | 是 | 否 |
同一个包外的子类 | 是 | 是(通过继承) | 否 | 否 |
包外的任何非子类的类 | 是 | 否 | 否 | 否 |
可以如此记忆,public是最容易访问的,private是最难访问的,default的界限比较清晰,包内和包外,而protected最复杂,包内的类和子类都可以访问。
部分内容摘自:http://m.blog.youkuaiyun.com/blog/pengbaoxing/8938795