Java提供了4种访问控制符,主要用于控制其他类是否可以访问某一类中的属性或方法,从而实现数据封装。四种访问控制符的权限大小(由大到小)为public(公共)、protected(保护)、default(默认)、 private(私有)。
private(私有):当类中属性或方法被private修饰时,表示此成员或方法只能被自己类中的方法使用,而不能被外部类或对象直接使用。例如:
public class PersonDemo {
public static void main(String[] args) {
Person person = new Person();
//person.name = "张三";//不能访问Person类中的私有属性
//person.fun();//不能访问Person类中的私有方法
}
}
class Person {
private String name = "";
private void fun() {
System.out.println(this.name);//可以访问自己类中的私有属性
}
public void fun1() {
fun();//可以访问自己类中的私有方法
}
}
default(默认):具有包访问权限,如果类中属性或方法不使用public,protected,privete修饰符修饰时,则说明其具有包访问权限,具有包访问权限的属性或方法既可以被自己类中的方法使用也可以被同一包下的其他类使用,但不能被其他包中的类使用。例如:
package com.person.test;
public class PersonDemo {
int age;
public void fun() {
System.out.println(this.age);//可以访问自己类中的默认属性
}
}
package com.person.test;
public class ManagerDemo {
public static void main(String[] args) {
PersonDemo personDemo = new PersonDemo();
personDemo.age = 18;//可以访问同一包下类中的默认属性
}
}
package com.student.test;
import com.person.test.PersonDemo;
public class StudentDemo {
public static void main(String[] args) {
PersonDemo personDemo = new PersonDemo();
//personDemo.age = 18;//不能访问不同包下类中的默认属性
}
}
protected(保护):具有子类访问权限。如果类中属性或方法被protected修饰符修饰,则此类中属性或方法可以被同一包下的类使用,也可以被不同包下的子类使用,但不能被不同包下的其他类使用。例如:
package com.person.test;
public class PersonDemo {
protected int age;
}
package com.student.test;
import com.person.test.PersonDemo;
public class SubDemo extends PersonDemo{
public static void main(String[] args) {
SubDemo subDemo = new SubDemo();
subDemo.age = 18;//保护属性被不同包下的子类使用
}
}
package com.student.test;
import com.person.test.PersonDemo;
public class StudentDemo {
public static void main(String[] args) {
PersonDemo personDemo = new PersonDemo();
//personDemo.age = 18;//保护属性不能被其他包中的类使用
}
}
public(公共):具有公共访问权限。如果类中的属性或方法被public修饰,则此类中的属性或方法可以被任何类调用。
总结:
四种访问控制权限如下("+"号表示有访问权限, "-"号表示没有访问权限):