数字化转型时代的数据分析职业发展指南
2026/7/28 20:21:48
都知道protected权限包括:同一个包(默认的包访问权限),和子类的访问权限。但对于子类的访问权限可能有些模棱两可。这里先给出结论:
在不同包中的子类的类定义中,可以使用父类的protected方法;但在不同包的子类对象,不可以通过这个子类对象来调用protected方法。
在com包中有个用来继承的基类,分别有一个成员函数和静态函数。
packagecom;publicclassbase{protectedvoidf(){System.out.println("member function");}protectedstaticvoidstaticF(){System.out.println("static function");}}测试类在默认包中,下面被注释掉的函数都是无法通过编译的。
importcom.base;publicclasstestP{publicstaticvoidmain(String[]args){base b=newbase(){//匿名内部类,且此处向上转型{f();}//实例初始化块};//b.f(); //无法通过编译//b.staticF();classderivedextendsbase{//局部内部类{f();}//实例初始化块}derived d=newderived();//此处没有向上转型//d.f(); //无法通过编译//derived.staticF();base bb=newbase();//直接创建父类//bb.f(); //无法通过编译//bb.staticF();}}通过测试发现:
super.f()了)相对而言,在同一个包中的java文件就可以访问了:
packagecom;//也在com包中的测试类publicclasstestP2{publicstaticvoidmain(String[]args){base b=newbase(){{f();}};b.f();b.staticF();classderivedextendsbase{{f();}}derived d=newderived();d.f();derived.staticF();base bb=newbase();//直接创建父类bb.f();bb.staticF();}}