Java Tutorial #29

Der protected Zugriffsmodifikator in Java

2019-06-10 | credit: ©Stefan/ stock.adobe

Die Zugriffsstufe protected erlaubt den Zugriff auf Instanzvariablen und Methoden außerhalb der eigenen Klasse für Klassen im selben package und darüber hinaus in vererbten Klassen.

Was macht protected?

Java besitzt insgesamt vier Zugriffsstufen, wovon protected eine ist. Die unterschiedlichen Stufen regeln die Sichtbarkeit von Membern einer Klasse (Instanzvariablen und Methoden). Das heißt, sie legen fest, in welchem Maß Code außerhalb der Klasse darauf zugreifen kann. Noch einmal zur Übersicht alle Zugriffsstufen:

Zugriffstufe Klasse Paket Sub-Klasse Welt
public OK OK OK OK
protected OK OK OK -
kein Modifier-Schlüsselwort (default) OK OK - -
private OK - - -

Die Zugriffsstufe protected erlaubt also den Zugriff auf Instanzvariablen und Methoden für die eigene Klasse, für Klassen im selben package und darüber hinaus in vererbten Klassen, auch wenn sie in einem anderem package sind:

Java proteced

Beispiel

Um eine Instanzvariable oder Methode als protected zu markieren, schreiben wir den Zugriffsmodifikator (access modifier) protected als erstes Schlüsselwort in der Variablendeklaration bzw. Methodendefiniton:

protected int fun = true;

protected void fly(){
    //
}

Schauen wir uns nun eine geschützte Instanzvariable und eine geschützte Methode im Einsatz an:

package paket1;

public class Bird {

    protected String action = "fly";

    protected void fly(){
        System.out.println(action);
    }

}

Die Instanzvariable action und die Methode fly() sind in der Klasse Bird mit der Zugriffsstufe protected markiert. Erzeugen wir nun eine Unterklasse von Bird und greifen darauf zu:

package paket2;

import paket1.Bird;

public class Falcon extends Bird {

   public Falcon(){
       System.out.println(action); // fly
       fly(); // fly

   }

}

Die Unterklasse Falcon erbt von Bird. Wir können deshalb in Falcon direkt auf die Instanzvariable action und die Methode fly() zugreifen, denn beide sind protected. Dies tun wir im Konstruktor von Falcon.

Wären die Member in Bird als private markiert, wäre ein Zugriff in Falcon nicht möglich (unterschiedliche Klassen). Auch das Weglassen des Zugriffsmodifikators (default access) würde einen Compiler-Fehler hervorrufen, da Bird und Falcon nicht im selben package sind (paket1 und paket2). 

Bedenken Sie aber: Auch wenn wir Instanzvariablen als protected markieren können, sollten wir in der Regel davon aber absehen und sie als privatedeklarieren, um die Kapselung zu stärken. Der Zugriff von anderen Klassen aus sollte indirekt über Methoden erfolgen.

Werbung

Java lernen

Werde zum Java Profi!

PHP Lernen

Lerne serverbasierte Programmierung

JavaScript lernen

Skille dein Webcoding

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2023 Stefan E. Heller

Impressum | Datenschutz | Changelog

Falconbyte Youtube Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen