java 提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围)
要求:背诵此表格
表格解释:在同一个类中四种都可以访问
举例说明
例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,400a.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通用,默认只可以同类和同包