1、类的访问控制符
类的访问控制符包括public和缺省的。
public访问控制符:
public class Person{
...
}
缺省的访问控制符:
class Person(){
...
}
public修饰的类可以在任何地方访问,而缺省的访问控制符只运行同一个包中使用。看下面的代码:
----------------源文件:A.java-------------------------
package ch11;
public class A{
...
}
----------------源文件:B.java-------------------------
package ch11;
class B{
...
}
----------------源文件:Test.java-------------------------
package ch11;
public class Test{
public static void main(String[] args){
A a = new A(); // 正确,public运行访问
B b = new B(); // 正确,同一个包允许访问
}
}
----------------源文件:ch12包下的Test.java-------------------------
package ch12;
import ch11.A;
import ch11.B; // 错误,不同包不能访问
public class Test{
public static void main(String[] args){
A a = new A(); // 正确
B b = new B(); // 错误,不同包不能访问
}
}
通常类的访问控制符都写成public,如果你希望对他的访问进行限制,可以使用缺省的访问控制符。
2、访问类型划分
在我们讨论访问权限的时候,我们会说允许外部类访问,允许子类访问,允许同包中的类访问等等,这些访问是什么意思呢?这既是访问类型,只有理解了这些访问类型,才能理解访问权限。
首先我们要清楚访问发生在什么地方,访问实际上是对某个对象(有时候会是类)的成员的访问,这些访问的代码肯定是在某个方法中。访问类型实际上是要访问的代码与被访问的代码所在位置的关系。下面对这些访问类型进行分析。
下面的例子展示了4中访问类型:
package ch11;
public class A{
public String id;
public String getId(){
return id; // 在类内部访问成员变量id,实际上是类自己的方法
}
}
package ch11;
public class B{
public String getInf(A a){
return a.id; // 同包中的类B中的方法访问类A的成员
}
}
package ch11;
public class C extends A{
public String getId(){
return id; // 子类直接调用父类的方法或者属性
}
}
package ch12;
public class D{
public String getInf(A a){
return a.id; // 不同包中的类D中的方法访问类A的成员
}
}
3、成员的访问控制符
成员的访问控制符有4种:public 缺省的 protected 和private。
如果访问控制符是public,则上卖弄的4种情况都可以。
如果访问控制符是缺省的,则第一种情况可以,同包的情况也可以。
如果访问控制符是protected,第一种情况可以,子类的情况也可以。
如果访问控制符是private,则只有第一种情况可以。
下面的表格是显示了具体的访问是否允许的情况:
类自身 | 子类 | 同包 | 不同包非子类 | |
public | OK | OK | OK | OK |
缺省的 | OK | 同包OK | OK | |
protected | OK | OK | OK | |
private | OK |
下面的例子展示了各种情况:
下一次介绍成员变量的继承。