java面向对象中级-访问修饰符
一、访问修饰符
基本介绍
java提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):
-
公开级别:用public 修饰,对外公开
-
受保护级别:用protected 修饰,对子类和同一个包中的类公开
-
默认级别:没有修饰符号,向同一个包中的类公开
-
私有级别:用private修饰,只有类本本身可以访问,不对外公开
通俗介绍
- public: 在任何地方都可以访问,没有限制。
- protected: 在同一个包内或子类中可以访问。
- 默认(无修饰符,有时也称为“包私有”): 只能在同一个包内访问。
- private: 只能在类内部访问,其他类无法访问。
使用的注意事项
- 修饰符可以用来修饰类中的属性,成员方法以及类
- 只有默认和public才能修饰类,并且遵循上述访问权限的特点
- 继承中关于子类的访问权限会在后续篇章讲解
- 成员方法的访问规则和属性完全一样
代码解释
示例1:
public class Animal {
public String name; // 可以被任何类访问
protected int age; // 在同一包内和子类中可访问
String color; // 默认访问修饰符,同一包内可访问
private boolean isHealthy; // 只能在本类中访问
public Animal(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
protected void sleep() {
System.out.println(name + " is sleeping.");
}
void eat() {
System.out.println(name + " is eating.");
}
private void visitVet() {
System.out.println(name + " is visiting the vet.");
}
}
示例2:
import animals.Animal;
public class Dog extends Animal {
public Dog(String name, int age, String color) {
super(name, age, color);
}
public void play() {
System.out.println(name + " is playing.");
}
public static void main(String[] args) {
Dog dog = new Dog("Buddy", 3, "Brown");
dog.age = 4; // 可以访问,因为age是protected
dog.color = "White"; // 可以访问,因为color是默认访问修饰符
// dog.isHealthy = true; // 无法访问,因为isHealthy是private
dog.sleep(); // 可以访问,因为sleep是protected
dog.eat(); // 可以访问,因为eat是默认访问修饰符
// dog.visitVet(); // 无法访问,因为visitVet是private
}
}