在Java语法中,对于类与类中的成员变量和成员方法是通过访问控制符来区分控制的。
下面来看看这四种访问控制符的区别:(public、protected、private、default)
1.public:public修饰的数据成员和成员函数是公开的,所有的用户都可以进行调用。
2.private:private修饰词修饰的成员变量以及成员方法只供本类使用,也就是私有的,其他用户是不可调用的。
3.protected:protected修饰词修饰的成员变量以及成员方法在同一个包中无论是其子类还是普通类都可以调其使用,在不同包中只供其子类调用。
4.default:default修饰词修饰的成员变量以及成员方法在同一个包中无论是其子类还是普通类都可以调用,在不同包中即使是子类也不可调用,这一点与protected修饰词存在其两者明显的区别,谨记区分。
这里对于public和private修饰词不做明细的区分,因为这两个修饰词不存在不难懂的地方;下面就protected和default修饰词用以贴代码的形式进行其区分比较如下:
首先我们创建一个类:类中用protected修饰词修饰变量
在同一个包中有一个类继承了这个类的话,那么就可以使用这个protected修饰的变量,同时在同一个包中,即使没有继承上面的类的话也是可以使用protected修饰的变量a;
在不同的包中,直接访问protected修饰词修饰的变量a,是不可以的,如下:
在不同包中,如果是继承了protected修饰变量a的那个类的话,那就可以调用protected修饰变量a了;
我们再来看看默认default修饰词修饰的变量,也是首先创建一个默认修饰变量的类:
和protected修饰词一样。只要是在同一个包中,无论是普通类还是继承修饰变量的那个类都可以直接访问默认修饰词修饰的变量a;
在不同的包中,和protected一样,是不能直接使用default修饰词修饰的变量a的,如下:
在不同的包中,default修饰的变量,即使是继承类修饰变量的那个类也是不可以调用变量a的,这一点和protected存在本质的区别:
最后做了个总结:
private是只有本类中才能访问,public是都能访问,默认(包访问权限)是只有本包内才能访问,包括本包内的子类和普通类,而protected是只要本包内就能访问,包括本包内的子类和普通类,另外别的包内的子类也能访问,但是普通类不能访问。所以说protected和默认(包访问权限)是很相似的,在同一个包内,它们是一样的,而在另一个包内,默认是不能访问的,而protected是只有子类能访问。
为了美观的呈现区别以便看起来更容易区分,特附与表格一张: