# protected und Standard Sichtbarkeit



## joe210 (15. Jul 2005)

Da mir die Java Insel und auch das HdJP4 diese Frage irgendwie nicht richtig "erklären" kann frag ich mal hier ???:L 

Die Sichtbarkeiten public und private sind mir absolut klar, nur protected wirft bei mir Fragen auf. Die Insel schreibt: 



> Wird eine Klasse erweitert, so sind die mit protected deklarierten Variablen und Methoden in der Unterklasse sichtbar, aber nicht außerhalb.



Ok, das leuchtet mir ein, der folgende Satz verwirrt mich aber:



> Zudem gilt die Erweiterung, dass alle Klassen im gleichen Paket auch den Zugriff bekommen.



Wenn das so wäre/ ist - wo ist dann der Unterschied zur Standard Sichtbarkeit (kein Schlüsselwort)?? Oder versteh ich da irgendwas total falsch?


----------



## messi (15. Jul 2005)

Bei der Standardsichtbarkeit können nur Klassen im gleichen Paket die Member sehen. Bei 'protected' zusätzlich alle abgeleiteten (und eingeschlossenen) Klassen. Du hast wahrscheinlich die Superklasse und die abgeleitete Klasse im gleichen Paket und sieht den Unterschied deshalb nicht.


----------



## perdian (15. Jul 2005)

joe210 hat gesagt.:
			
		

> Wenn das so wäre/ ist - wo ist dann der Unterschied zur Standard Sichtbarkeit (kein Schlüsselwort)?? Oder versteh ich da irgendwas total falsch?



Bei protected geht sowas:


```
package test.t1;

public class C1 {
  protected void foo() {
    System.err.println("foo aus C2");
  }
}

-------------------------------------

package test.a.b.c.d.e.f;

public class C2 extends C1 {
  protected void foo() {
    super.foo();
    System.err.println("foo aus C1");
  }
}
```

Wogegen mit package private sowas hier nicht geht:


```
package test.t1;

public class D1 {
  void foo() {
    System.err.println("foo aus D1");
  }
}

-------------------------------------

package test.a.b.c.d.e.f;

public class D2 extends D1 {
  void foo() {
    super.foo();
    System.err.println("foo aus D2");
  }
}
```

Beim kompilieren von D2 wirst du eine Fehlermeldung erhalten, da D2 nicht im gleichen Package wie D1 ist, und von daher keine Sichtbarkeit auf foo aus D1 hat.


----------

