Was bedeutet der Modifikator protected?

Konstruktoren, Methoden und Felder, die mit dem Modifikator protected gekennzeichnet sind, stehen auch in von der deklarierenden Klasse abgeleiteten Klassen anderer Packages zur Verfügung.

Sind Methoden, Konstruktoren oder Felder in einer Klasse als protected gekennzeichnet, so sind diese Strukturen ähnlich einer package-default-Deklaration nur im Package der deklarierenden Klasse ansprechbar, bis auf Konstruktoren zusätzlich jedoch auch noch in den von ihr abgeleiteten Klassen anderer Packages.

package abc;

public class ProtectedTest {
    
    protected void machWas() {
        System.out.println("ProtectedTest#machWas() ausgefuehrt");
    }
}

//------------------------------------------

package xyz;

import abc.ProtectedTest;

public class Prot2Test extends ProtectedTest {

    public static void main(String[] args) {
        new Prot2Test().machWas();
    }
}
				

Im o.a. Beispiel wird eine Klasse Prot2Test im Package xyz deklariert, die von der Klasse ProtectedTest im Package abc abgeleitet ist. In main() wird die Kindklasse instanziert und die Methode machWas() aufgerufen. Sie wurde von der Elternklasse geerbt und dort protected deklariert. So ist sie auf dem Objekt der abgeleiteten Klasse erreichbar.

Entfernt man das Schlüsselwort protected der Methode machWas() ist das Beispiel fehlerhaft, da die Methode dann lediglich im Package abc sichtbar ist.

Zum Geheimnisprinzip und für einen Vergleich der Zugriffsmodifikatoren siehe auch den Artikel zum Geheimnisprinzip.

Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.