Java中的访问控制修饰符一共有四个:public、default、protected、private。
public : 可以修饰类、接口、方法、变量。
default : 可以修饰类、接口、方法、变量。
protected : 只能修饰方法、变量,不能修饰外部类和接口。
private: 只能修饰方法、变量,不能修饰外部类和接口。
权限表如下:
public 和private都比较容易记忆理解。public修饰的类、接口、方法、变量 在整个项目中都是可见的,而private修饰的内部类、内部接口、方法、变量只能被类内部所访问。
default和protecd修饰的类、接口、方法、变量都只能被同一包内的其它类所访问。但是protected修饰的内部类、内部接口、方法、变量可以被不同包的子类内部所访问,但是default修饰的内部类、内部接口、方法、变量不可以被不同包的子类所访问。
下面通过一个例子来说明一下protected:
我们在在modifier2包中创建了一个Father类,hello()方法被protected修饰,printf()方法缺省访问控制符即default。 我们在包modifier中创建了一个Son类继承Father类,可以看到,我们可以在子类内部访问父类被protected修饰的方法,而不能访问被default修饰的printf()方法。父类被protected修饰的内部类、内部接口、方法、变量虽然可以被不同包的子类内部所访问但是却不能被被子类同包中的其它类所访问。而且子类并不能继承父类的protected修饰的内部类、内部接口、方法、变量如果他们不在同一个包中的话,子类这时候可以通过重写父类的protected方法来达到被同一包中的其它类所访问。
总结一下:public 随处可见,default、protected同包可见,不同包子类内部仅protected可见。private仅类内部可见。
网友评论