Avatar ·

ما الفرق بين public و protected و package-private و private في Java؟

مرحباً بالجميع! لقد بدأت للتو في تعلم Java ولا أستطيع فهم معدّلات الوصول. يبدو أنني أفهم أنها تتحكم في رؤية الفئات والطرق والحقول، لكن في الممارسة العملية أخلط بينها باستمرار.

على سبيل المثال، لدي هذا الكود:

public class Animal {
    public String name;
    protected int age;
    String breed; // package-private
    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();    // متاح
    }
}