1.基本介绍
Java提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):
- 公开级别:用public修饰,对外公开
- 受保护级别:用protected修饰,对子类和同一个包中的类公开
- 默认级别:没有修饰符号,向同一个包的类公开
- 私有级别:用private修饰,只有类本身可以访问,不对外公开
2. 四种访问控制修饰符的访问范围
访问级别 | 访问控制修饰符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | × |
默认 | 无 | √ | √ | × | × |
私有 | private | √ | × | × | × |
2.1 访问范围具体例子
public_show包下创建一个类,其中创建了含有public、protected、默认和private修饰的属性。在同一类中,可以访问public、protected、默认和private修饰的属性和方法。
package public_show;
public class public_show {
public int num1 = 10;
protected int num2 = 20;
int num3 = 30;
private int num4 = 40;
//在同一类中,可以访问public、protected、默认和private修饰的属性和方法
public void m1(){
System.out.println("num1=" + num1 + "num2=" +
num2 + "num3=" + num3 + "num4" + num4);
}
}
(1)private
在同一个包下,创建了另一个类private_show。在同一个包下,可以访问 public、protected和默认修饰的属性或方法,但不能访问 private 属性或方法。
package public_show;
public class private_show {
public void say(){
public_show show = new public_show();
//在同一个包下,可以访问 public、protected和默认修饰的属性或方法,
//不能访问 private 属性或方法
System.out.println("num1=" + show.num1 + "num2=" +
show.num2 + "num3=" + show.num3);
}
}
(2)默认和protected
在同一个包下,创建了另一个类moren_show。在同一个包下,即使父类的访问修饰符是默认的, 在子类中也可以使用。
package public_show;
public class moren_show extends public_show{
public void say(){
//在同一个包下,即使父类的访问修饰符是默认的, 在子类中也可以使用。
//不能访问 private 属性或方法
System.out.println("num1=" + num1 + "num2=" +
num2 + "num3=" + num3);
}
}
在另一个包moren_show下创建了一个类moren_show,继承了public_show包下的public_show类,不能访问 默认 和 private 属性或方法。
package moren_show;
import public_show.public_show;
public class moren_show extends public_show{
public void say(){
//不在一个包的子类,可以访问 public、protected修饰的属性或方法,
//不能访问 默认和private 属性或方法
System.out.println("num1=" + num1 + "num2=" + num2);
}
}
3.类的访问控制修饰符
只有 默认 和 public 可以修饰类。其中,如果一个类声明的时候使用了public class,则类名称必须与文件名称一致,否则会报错。
public class Show{}
class Solution{}
处于默认修饰符下的类,只能在同一个包中被访问。