java 的访问控制符为了控制类还有类对应方法的访问做限制。
如上的图表总结了类方法的访问控制范围,其实类的访问控制范围也是类似的情况。声明为public则不管外部包还是内部都能够访问,如果为default则只能本包内能够访问
关于类方法的访问范围,我们比较熟悉的是private还有public,private只有本类的内部才能访问而public则到处都能访问
这里主要聊的是default和protected
一、default
我们的访问限制中没有default这个关键字,但是我们没有写public、protected、default或者private则表示为default
package com.example.exampletest.testvisit; public class TestVisit { public void printPublic() { System.out.println("TestVisit:printPublic"); } protected void printProtected() { System.out.println("TestVisit:printProtected"); } void printDefault() { System.out.println("TestVisit:printDefault"); } private void printPrivate() { System.out.println("TestVisit:printPrivate"); } }
如上的printDefault函数可以在包路径为com.example.exampletest.testvisit 中的其他类中访问的到
那么假设有一个包名为:com.example.exampletest.testvisit.nextfold 中的类是不能访问到TestVisit 中的printDefault函数
二、protected
在同一个包中,访问范围跟default一样就不赘述;这里主要讲不同包之间的访问
package com.example.exampletest; class TryVisits extends TestVisit { void printVisit() { this.printPublic(); this.printProtected(); } }
在包com.example.exampletest中有类TryVisits 继承TestVisit,TryVisits作为TestVisit的子类,虽然跟TryVisits不在同一个包中,但是依旧能够访问的到printProtected
package com.example.exampletest; public class HelloWorld { private void testVisits() { TryVisits visits = new TryVisits(); visits.printPublic(); // visits.printProtected(); // 访问不到 } }
如上在跟TryVisits同一个包中的HelloWorld类new出来的TryVisits也是不能访问TryVisits的父类的成员函数printProtected,因为HelloWorld既不是TestVisit的子类也不是跟TestVisit在同一个包中。
标签:TryVisits,TestVisit,default,private,访问,protected,java,public From: https://www.cnblogs.com/czwlinux/p/16725179.html