java访问权限(子类继承父类的方法)

访问控制
修饰符当前类同一包内子孙类(同一包)子孙类(不同包)其他包
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(){ } } 

访问控制
修饰符当前类同一包内子孙类(同一包)子孙类(不同包)其他包
访问控制
修饰符当前类同一包内子孙类(同一包)子孙类(不同包)其他包
原文地址:https://www.cnblogs.com/sunupo/p/13226731.html