基本介绍
java 提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围)
- 公开级别:用 public 修饰,对外公开
- 受保护级别:用 protected 修饰,对子类和同一个包中的类公开
- 默认级别:没有修饰符号,向同一个包的类公开.
- 私有级别:用 private 修饰,只有类本身可以访问,不对外公开.
四种访问修饰符的访问范围
要求:背诵此表格
表格解释:在同一个类中四种都可以访问
举例说明
例1:
package com.hspedu.modifier;
public class A {
//四个属性,分别使用不同的访问修饰符来修饰
public int n1 = 100;
protected int n2 = 200;
int n3 = 300;
private int n4 = 400;
public void m1(){
//在同一个类中该方法可以访问public、protected,默认,private修饰的属性或方法
// 属性
System.out.println("n1=" + n1 + " n2=" + n2 + " n3=" + n3 +" n4=" + n4);
}
protected void m2() { }
void m3() { }
private void m4() { }
public void hi(){
//方法
m1();
m2();
m3();
m4();
}
同包不同类的话不可以访问private
package com.hspedu.modifier;
public class B {
//同包
public void say(){
//A类是public,所以同包不同类也可以访问
A a = new A();
//直接访问属性,同包不同类的时候,不能访问private修饰的属性或方法
System.out.println("n1=" + a.n1 + " n2=" + a.n2 + " n3=" + a.n3);//输出100,200,300
//不能访问private修饰的方法
a.m1();//输出100,200,300,400
a.m2();
a.m3();
}
}
新建Test类运行上述代码
package com.hspedu.modifier;
public class Test {
public static void main(String[] args) {
//跨类调用,public A类
A a = new A();
//是调用m1方法,其访问修饰符是public,不是直接访问属性
// 所以可以同包不同类的调用
a.m1();
B b = new B();
b.say();
}
}
运行结果:
第一行是a.m1();的运行结果
第二行和第三行是b.say();即b类say()方法的运行结果
如果是不同包的话,只可以访问public
package com.hspedu.pkg;
import com.hspedu.modifier.A;
public class Test {
public static void main(String[] args) {
A a = new A();
//在不同包下只能访问public修饰的属性或方法
//不可以访问ptotected,私有,private修饰的属性或方法
System.out.println("n1 =" + a.n1);
a.m1();
//不能访问a.m2();a.m3();a.m4()
}
}
属于不同的包:package com.hspedu.modifier、package com.hspedu.pkg
类的访问修饰符:只有两种:public和默认,访问范围同上,public通用,默认只可以同类和同包