Java基础:访问权限修饰符      
View on GitHub

龙珠

修炼自己与发现世界

Java基础:访问权限修饰符

By arthur503 -- 10 Oct 2013

Java中有四种访问权限修饰符,public、protected、friendly、private,用于对方法(成员变量)和类的修饰(不是全部可用)。

注意:friendly不是Java关键字,而是从C++中来的,指的是默认的同一包内访问权限。

一、修饰成员变量和方法

1. public:

* 成员变量和方法:表示共有,任何情况下都可以访问;

2. protected:

* 成员变量和方法:必须在同一包中才能被访问;继承的子类/派生类也具体有相同的权限。

3. friendly:

4. private:

* 成员变量和方法:只能在本类中访问;

二、修饰类

类只可以声明为public或者friendly,不可以声明为protected或private。

用public修饰的类任何情况下都可以访问,用friendly修饰的类叫友好类,同一个包中的类可以用。

三、继承

这里的访问修饰符指的是修饰成员变量和方法。分为两种情况:

1. 子类与父类在同一个包中

只有声明为private的变量与方法不可以被继承(访问),而public、protected、friendly都可以被继承。

2. 子类和父类不在同一包中

此时,private和friendly均不能被访问(继承),而protected与public可以被继承。

所以,访问权限修饰符权限从高到低排列是public,protected,friendly, private。

四、总结friendly和protected的区别

friendly和protected都表示包内的访问权限(如果可以使用的话)。

修饰成员变量和方法:

1. 无继承时:修饰成员变量和方法的时候没有区别,都是包内访问权限;

2. 有继承时:

  1. 1 子类和父类在同一个包内:protected和friendly都可以被继承;
  2. 2 子类和父类不在同一个包内:protected可以被继承,friendly不可被继承。

修饰类:

因此,不考虑对类的声明,访问权限控制符权限从高到低是:public、protected、friendly、private。我们可以列个表格如下:

修饰符	修饰成员变量 	修饰类 	继承(包内)  继承(包外)
public 		可以 		可以 	可以 		可以
protected 	可以 		不可以 	可以 		可以
friendly 	可以 		可以 	可以 		不可以
private 	可以 	 	不可以	不可以 		不可以

因此,我们可以这样理解:


参考资料: