一、前言Java中有四种访问修饰符:private、default(没有对应的保留字)、protected、public。今天就让我们一起来看看这四种访问修饰符的访问限制吧!从强到弱,它们是私有的、默认的、受保护的和公共的。2、访问修饰符介绍java中有四种访问修饰符:private、default(没有对应的保留字)、protected、public。其含义如下:private:如果一个元素声明为private,则该元素的访问权限仅限于当前类。default:如果一个元素被声明为default,则该元素的访问仅限于当前包。protected:如果一个元素被声明为protected,那么当前包下的元素或者它的子类都可以访问该元素。public:如果一个元素被声明为public,那么这个元素可以在任何地方被调用(无论是在同一个类中还是在同一个包中)。四种访问修饰符符合元素的访问限制,从强到弱依次为private、default、protected、public。如果A类和B类的访问修饰符都是public的,那么当A类中的一个方法要调用B类中的一个方法时,可以根据下图判断是否可以访问:3.下面的例子说明了四个修饰符对Element访问限制3.1私有类B中的方法需要调用同包中A的私有方法,编译时会报错:packagep1classA{privateStringgetName(){return"jim";}publicvoiddisplay(){System.out.println(this.getName());}}packagep1classB{publicvoiddisplay(){Aa=newA();System.out.println(a.getName());}}3.2默认类C中的方法需要在不同的packages方法下调用classA的default,编译时会报错:a.getName());}}packagep2publicclassC{publicvoiddisplay(){Aa=newA();System.out.println(a.getName());}}3.3保护C类中的ted方法需要调用A类的protected方法,编译时会报错:.getName());}}packagep2publicclassC{publicvoiddisplay(){Aa=newA();System.out.println(a.getName());}}3.4public无访问限制。packagep1publicclassA{publicStringgetName(){return"jim";}}packagep2publicclassB{publicvoiddisplay(){Aa=newA();System.out.println(a.getName());}}4.当子类隐藏(hide)或重写父类方法时对访问修饰符的限制当子类中的方法隐藏/重写父类中的方法时,子类方法的访问修饰符比类方法的访问修饰符更受限制父类访问限制中的相应方法应该相同或更弱。这是面向对象的基本原则,子类应该比父类更完善,所以子类应该更容易访问。示例如下:classFather{protectedstaticvoidstaticMethod(){}publicvoidmethod(){}}classSonextendsFather{staticvoidstaticMethod(){}protectedvoidmethod(){}}5.元素支持的访问修饰符。每个元素(如类、接口、注解、结构函数、成员变量、成员方法等)都会显示或隐式访问修饰符,但不是每个元素都支持四种访问修饰符:对于直接定义在包中的元素,如类、枚举(本质上是继承自Enum的类)、接口和注解(本质上是继承自Anotation的类),它们支持的访问修饰符是public和default。对于类内部定义的元素,如构造函数、成员变量、成员方法、内部类、内部接口等,它们支持所有四种访问修饰符。对于接口中定义的方法,只支持public(如果不指定,默认为public);对于接口中定义的变量,只支持publicstaticfinal(不指定则默认为publicstaticfinal)。补充说明:该接口支持三种方法,即不带消息体的方法(默认修饰符为publicabstract)、通过默认保留字定义(默认修饰符为public)、通过static保留字定义(默认修饰符是public)。
