Java中权限修饰符
public:公共权限,修饰属性、方法、类,可以被任意类访问
private:私有权限,修饰属性、方法,只能在本类中访问
protected:受保护的权限,修饰属性、方法
- 父类的protected修饰的成员是在同一包中可见的,并且对子类也可见,详细的见以下代码
Father类
package com.zretc.p2;
public class Father {
protected int num;
protected void method1() {
System.out.println("编译通过");
}
}
同包非子类
package com.zretc.p2;
public class Test {
public static void main(String[] args) {
Father father1 = new Father();
father1.method1();//编译通过
father1.num = 10;//编译通过
}
}
同包子类
package com.zretc.p2;
public class Son1 extends Father{
public static void main(String[] args) {
Father father1 = new Father();
father1.method1();//编译通过
father1.num = 10;//编译通过
Son1 son1 = new Son1();
son1.num = 10;//编译通过
son1.method1();//编译通过
}
}
- 若这个子类与父类不在同一个包中,那么这个子类只能访问从父类继承过来的protected成员,但是不能访问父类本身实例的protected方法。这里其实是最不好理解的,可以通过下列代码来理解
异包子类
package com.zretc.p22;
import com.zretc.p2.Father;
public class Son2 extends Father{
public static void main(String[] args) {
Father father2 = new Father();
father2.method1();//编译错误
father2.num = 10;//编译错误
Son2 son2 = new Son2();
son2.method1();//编译通过
son2.num = 10;//编译通过
}
}
这里的father对象即为基类(Father类)的实例,因此不能直接访问它自身的method1()方法。而son2是其子类的对象,因此可以访问从基类Father类继承过来的method1()方法了。
default:同包权限,修饰类、属性、方法,只能被同包的类访问
【注】只有public和default可以修饰类,protected和private只能修饰属性和方法。