访问修饰符
Java中定义了private(私有的)、protected(受保护的)和public(公共的)的访问修饰符,同时也定义了一个缺省的访问级别,用于声明类、属性、方法的访问权限。
使用public访问修饰符,类的成员可被同一包或不同包中的所有类访问,也就是说,public访问修饰符可以使类的特性公用于任何类;
使用protected访问修饰符允许类本身、同一包中的所有类和不同包中的子类访问;
如果一个类或类的成员前没有任何访问修饰符时,它们获得缺省的访问权限,缺省的可以被同一包中的其他类访问;
private访问修饰符是限制性最大的一种访问修饰符,被声明为private的成员只能被此类中的其他成员访问,不能在类外看到。
例如:
首先,定义MyClass1类结构:
public class MyClass1 {
public int a = 5;
private int b = 10;
protected int c = 20;
int d = 30;
public void func1() {
System.out.println(“func1”);
}
private void func2() {
System.out.println(“func2”);
System.out.println(b);
}
protected void func3() {
System.out.println(“func3”);
}
void func4() {
System.out.println(“func4”);
}
}
然后,定义MyClass2类结构:
class MyClass2 {
public void func1() {
System.out.println(“func1 of MyClass2”);
}
}
最后,定义Test类,假如将Test类放在与MyClass1和MyClass2同一个包p1下,在Test中访问MyClass1、MyClass2及其成员的可行性如下 :
public class Test {
public void func() {
MyClass1 obj1 = new MyClass1();
System.out.println(obj1.a); // 公共属性,任何地方都可以访问
System.out.println(obj1.b); // Error,私有属性类外无法访问
System.out.println(obj1.c); // 受保护属性同包的类或子类可以访问
System.out.println(obj1.d); // 缺省属性同包的类可以访问
obj1.func1(); // 公共方法,任何地方都可以访问
obj1.func2(); // Error,私有方法类外无法访问
obj1.func3(); // 受保护方法同包的类或子类可以访问
obj1.func4(); // 缺省方法同包的类可以访问
MyClass2 obj2 = new MyClass2(); // 同一包中的缺省类可以访问
}
}
假如将Test类放在与MyClass1和MyClass2不同的包下,在Test中访问MyClass1、MyClass2及其成员的可行性如下 :
public class Test {
public void func() {
MyClass1 obj1 = new MyClass1();
System.out.println(obj1.a); // 公共属性,任何地方都可以访问
System.out.println(obj1.b); // Error,私有属性类外无法访问
System.out.println(obj1.c); // Error,受保护属性同包的类或子类才可以访问
System.out.println(obj1.d); // Error,缺省属性同包的类才可以访问
obj1.func1(); // 公共方法,任何地方都可以访问
obj1.func2(); // Error,私有方法类外无法访问
obj1.func3(); // Error,受保护方法同包的类或子类才可以访问
obj1.func4(); // Error,缺省方法同包的类才可以访问
MyClass2 obj2 = new MyClass2(); // 缺省访问级别同包才可以访问
}
}
假如Test类继承了MyClass1,并且不在同一个包下,在Test中访问MyClass1、MyClass2及其成员的可行性如下 :
public class Test extends MyClass1{
public void func() {
System.out.println(a); // 公共属性,任何地方都可以访问
System.out.println(b); // Error,私有属性类外无法访问
System.out.println©; // 受保护属性同包的类或子类可以访问
System.out.println(d); // Error,缺省属性同包的类才可以访问
func1(); // 公共方法,任何地方都可以访问
func2(); // Error,私有方法类外无法访问
func3(); // 受保护方法同包的类或子类可以访问
func4(); // Error,缺省方法同包的类才可以访问
MyClass2 obj2 = new MyClass2(); // 缺省访问级别同包才可以访问
}
}