Java 访问控制修饰符有 default
、public
、private
、protected
四种。
default
有些地方称friendly
,是缺省默认的修饰符,可以修饰类、接口、变量及方法,在同一包内均被可见。
public
对所有类均可见,可以用来修饰类、接口、变量及方法。
private
- 用来修饰变量和方法:只在同一类内可见,一般建议成员变量均被控制为
private
,而通过public
的 get 和 set 方法来修改和访问。private
修饰方法时,子类也不能使用此方法。
- 类和接口一般不能用
private
修饰(内部类除外)。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public class Animal { private int age; private int weight; private String name;
public Animal(String name) { this.name = name; }
public void setName(String name) { this.name = name; }
public void setAge(int age) { this.age = age; }
public void setWeight(int weight) { this.weight = weight; }
public String getName() { return this.name; }
public int getAge() { return this.age; }
public int getWeight() { return this.weight; }
|
protected
- 不同包,非子类不可见
- 同一包内其他类及子类可见
- 子类与父类不在同一包中,那么在子类中,子类实例可以访问其从父类继承而来的
protected
方法,而不能访问父类实例的 protected
方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package p2; class MyObject2 { protected Object clone() throws CloneNotSupportedException{ return super.clone(); } }
package p22; public class Test2 extends MyObject2 { public static void main(String args[]) { MyObject2 obj = new MyObject2(); obj.clone();
Test2 obj2 = new Test2(); obj2.clone(); } }
|
- 一般不能用
protected
来修饰类和接口(内部类除外)。
参考资料