修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
public |
Y | Y | Y | Y | Y |
protected |
Y | Y | Y | Y/N(说明) | N |
default |
Y | Y | Y | N | N |
private |
Y | N | N | N | N |
父类A,K是类A的一个成员变量子类B 不在同一包,子类C 在同一包
-
子类与基类在同一包中:子类可以继承父类的public、protected、default修饰的成员变量和方法
-
子类与基类不在同一包中:子类只继承父类的public protected修饰的成员变量和方法
子类访问基类的成员变量,并且成员变量是一个类K.
-
子类与基类在同一包中:子类可以访问父类的public、protected、default修饰的成员变量K的public、protected、default修饰过的方法(类C与K没有继承关系,但是在同一包,可以访问K的public、protected、default修饰过的方法)(在C中,C与A同一包,根据规则,private不能访问,所以k3不能访问;k, k1,k2可以访问,能访问k,k1,k2的public,protected和default方法)
-
子类与基类不在同一包中:子类只可以访问父类的public修饰的成员变量K的public修饰的方法(类B与K没有继承关系,仅仅是不同的包,只能访问K的public修饰的方法)(在B中,B与A不同包,根据规则,default和private不能访问,所以k2,k3不能访问;虽然k, k1可以访问,也只能访问类k,k1的public方法)
(其实就是说:先判定是否为同一包,再判定是否为子孙类)
package testExcel; publicclass A { publicint x = 5; protectedint y = 8; int p; privateint q; public K k; protected K k1; K k2; private K k3; publicvoid getPublic(){ System.out.print("public fun"); } protectedvoid getProtected(){ System.out.print("protected fun"); } void getDefault(){ System.out.println("default fun"); } privatevoid getPrivate(){ System.out.println("private fun"); } }package child; import testExcel.A; publicclass B extends A{ int getPublicX(){ return x; } int getProtectedY(){ return y; } // int getDefaultP(){ // return p; // 不能访问 // } // int getPrivateQ(){ // return q; // 不能访问 // }publicstaticvoid main(String[] args) { B b = new B(); b.getPublic(); b.getProtected(); b.k.getKPublicFun(); b.k1.getKPublicFun(); } }package testExcel; import testExcel.A; publicclass C extends A{ int getPublicX(){ return x; } int getProtectedY(){ return y; } int getDefaultP(){ return p; } // int getPrivateQ(){ // return q; // 不能访问 // }publicstaticvoid main(String[] args) { C c = new C(); c.getPublic(); c.getProtected(); c.getDefault(); c.k.getKPublicFun(); c.k.getKProtectedFun(); c.k.getDefaultFun(); c.k1.getKProtectedFun(); c.k1.getKPublicFun(); c.k1.getDefaultFun(); c.k2.getKProtectedFun(); c.k2.getKPublicFun(); c.k2.getDefaultFun(); } }package testExcel; publicclass K { publicvoid getKPublicFun() { System.out.println("KPublicFun"); } protectedvoid getKProtectedFun() { System.out.println("KProtectedFun"); } void getDefaultFun(){ } privatevoid getPrivateFun(){ } }
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |