Avatar ·

public、protected、包级私有和private在Java中的区别是什么?

大家好!我刚开始学习Java,一直搞不清楚访问修饰符。我大概明白它们控制类、方法和字段的可见性,但在实践中总是混淆。

例如,我有这样一段代码:

public class Animal {
    public String name;
    protected int age;
    String breed; // 包级私有
    private String id;
    
    public void makeSound() {
        System.out.println("Some sound");
    }
    
    protected void sleep() {
        System.out.println("Sleeping...");
    }
    
    void eat() {
        System.out.println("Eating...");
    }
    
    private void breathe() {
        System.out.println("Breathing...");
    }
}

public class Dog extends Animal {
    public void testAccess() {
        name = "Buddy"; // 可访问
        age = 5;        // 可访问
        breed = "Lab";  // 可访问
        // id = "123";  // 不可访问 - private
        makeSound();    // 可访问
        sleep();        //