protected – Zugriff für Unterklassen und Paket¶
Kurzüberblick¶
protectedist ein Zugriffsmodifikator mit mittlerer Sichtbarkeit- Zugriff erlaubt für:
- die eigene Klasse
- Klassen im selben Paket
- Unterklassen (auch paketübergreifend)
- Kein Zugriff für:
- fremde Klassen in anderen Paketen ohne Vererbung
- Gilt für:
- Attribute
- Methoden
- innere Klassen (keine Top-Level-Klassen)
Core-Erklärung¶
Grundprinzip¶
👉 protected kombiniert zwei Zugriffskonzepte:
- Paket-Sichtbarkeit
- Vererbungs-Sichtbarkeit
flowchart TD
A[protected Element] --> B[Eigene Klasse]
A --> C[Selbes Paket]
A --> D[Unterklasse gleiches Paket]
A --> E[Unterklasse anderes Paket]
A --> F[Andere Klasse anderes Paket ❌]
Zugriff im Detail¶
| Zugriff von... | erlaubt? |
|---|---|
| Eigene Klasse | ✅ |
| Gleiche Paketklasse | ✅ |
| Unterklasse (gleiches Paket) | ✅ |
| Unterklasse (anderes Paket) | ✅ |
| Fremde Klasse (anderes Paket) | ❌ |
Wichtige Besonderheit (Prüfungsfalle!)¶
Bei Unterklassen in anderen Paketen gilt:
👉 Zugriff nur über Vererbung, nicht über Objektreferenzen
Beispiel: Paketübergreifende Vererbung¶
// Paket A
public class Parent {
protected int value = 10;
}
// Paket B
public class Child extends Parent {
public void test() {
System.out.println(value); // ✅ erlaubt
}
}
⚠️ Typischer Fehler¶
// Paket B
public class Other {
public void test() {
Parent p = new Parent();
// System.out.println(p.value); ❌ NICHT erlaubt
}
}
👉 Warum?
- Keine Vererbung → kein Zugriff trotz protected
Vergleich zu anderen Modifikatoren¶
| Modifikator | Klasse | Paket | Unterklasse | Weltweit |
|---|---|---|---|---|
private |
✅ | ❌ | ❌ | ❌ |
| (default) | ✅ | ✅ | ❌ | ❌ |
protected |
✅ | ✅ | ✅ | ❌ |
public |
✅ | ✅ | ✅ | ✅ |
Einsatz von protected¶
protected wird verwendet, wenn:
- eine Klasse vererbbar sein soll
- bestimmte Details für Unterklassen sichtbar sein müssen
- aber nicht öffentlich sein sollen
👉 Typischer Einsatz: - Framework-Design - Basisklassen (Superclasses)
Praktisches Beispiel¶
public class Animal {
protected String name;
protected void makeSound() {
System.out.println("Some sound");
}
}
public class Dog extends Animal {
public void speak() {
System.out.println(name); // Zugriff erlaubt
makeSound(); // Zugriff erlaubt
}
}
Exam-Relevanz¶
Typische Prüfungsfragen:
- Unterschied zwischen
protectedunddefault - Zugriff in anderen Paketen
- Verhalten bei Vererbung
- Warum ist
protectedwichtig für OOP?
Merksatz:
protected= Paket + Vererbung, aber nicht öffentlich
Häufige Fehler & Klarstellungen¶
1. „Protected = nur Unterklassen“¶
❌ Falsch
→ Auch alle Klassen im selben Paket haben Zugriff
2. Zugriff über Objekte in anderen Paketen¶
❌ Falsch:
Parent p = new Parent();
p.value; // nicht erlaubt
👉 Nur über Vererbung erlaubt
3. „Protected ist sicher“¶
⚠️ Eingeschränkt
- Innerhalb des Pakets → vollständig sichtbar
- Schutz nur gegenüber externen Klassen
4. Falsche Verwendung statt private¶
❌ Problem: - unnötig große Sichtbarkeit
👉 Besser:
- private + gezielte Methoden
Fazit¶
protectedist ein Kompromiss zwischen Kapselung und Erweiterbarkeit- Besonders wichtig für:
- Vererbung
- Frameworks
- Sollte verwendet werden, wenn:
- Unterklassen Zugriff brauchen
- aber die Daten nicht öffentlich sein sollen
👉 Gute Praxis:
- Erst private überlegen
- dann bewusst erweitern (protected / public)