访问权限控制简介
Java 中一共有四种访问权限控制,其权限控制的大小:
public > protected > default(包访问权限) > private
访问权限修饰符 | 当前类 | 同一包内的类 | 子类 | 同一包中的子类 | 不同包中的子类 |
---|---|---|---|---|---|
public | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
protected | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
默认 | ✔️ | ✔️ | ❌ | ❌ | ❌ |
private | ✔️ | ❌ | ❌ | ❌ | ❌ |
1、public(共有): 所修饰的类、变量、方法,在内外包均具有访问权限;
2、protected(受保护): 为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问,对外包的非子类是不可以访问;
3、友好(default,又名包访问权限): 只对同包的类具有访问的权限,其他包的所有类都不能访问;
4、private( 私有权限): 只对本类的方法可以使用;
访问权限的作用:
-
提高代码的灵活性。
-
使用户碰触不到不该碰触的部分;开发者可以更改类的内部工作的方式,而不会担心这样会对用户产生重大影响;
举例说明
public class Animal {
private static final String CATEGORY = "Animal";
protected String name;
protected int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(name + " is eating");
}
private void sleep() {
System.out.println(name + " is sleeping");
}
public static void main(String[] args) {
Animal animal = new Animal("Tom", 5);
animal.eat(); // 可以访问公共方法
animal.sleep(); // 私有方法只能在同一类中访问
System.out.println(CATEGORY); // 可以访问静态常量
}
}
定义了一个Animal类。它具有私有的name和age变量,protected的eat方法和私有的sleep方法。我们还定义了一个公共的静态常量CATEGORY。在main方法中,我们创建了一个Animal对象,并展示了不同访问权限和修饰符的使用。
这个例子展示了如何在Java中使用不同的访问权限和修饰符来控制访问和可见性,以及如何利用它们来实现封装和安全性。