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只能修饰属性和方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)