Sichtbarkeit von Modifiern erweiterbar?

BlubBlub

Bekanntes Mitglied
Hi,

ich dachte immer man kann die Sichtbarkeit von Modifiern nur weiter einschränken aber nicht erweitern.
Wenn ich also eine Oberklasse mit einer public Methode habe, dann kann die Unterklasse davon die sichbarkeit auf private, protected oder "package" herunterstufen.
Wenn eine Oberklasse eine private Methode hat, so kann die Unterklasse diese durch Überschreiben nicht auf public erweitern.
Warum ist es also möglich eine protected Methode einer Oberklasse in einer Unterklasse auf public zu erweitern?

Ich sehe immer wieder, dass die clone Methode der Oberklasse Object überschrieben und deren Sichtbarkeit von protected auf public erweitert wird.
Java:
  public class Buffer implements Cloneable {
    int[] buffer = new int[100];
    ...
    public Object clone() {
      Object theClone = null;
      try {
        theClone = super.clone();
      }
      catch(CloneNotSupportedException e) {
      }
      return theClone;
    }
  
  }
 
S

SlaterB

Gast
es ist genau andersrum und auch logisch,
wenn Object public toString() anbietet und in einer Object-Variablen ein Objekt der Klasse X drinliegt,
dann will man über die Object-Schnittstelle doch wohl ganz normal toString() aufrufen können,
was soll mit diesem Aufruf passieren wenn X die Sichtbarkeit der Methode einschränkt? davon kann der allgemeine Code doch gar nichts wissen,
das Interface von Object ist für die Subklassen bindend,

andersrum stört Erweiterung überhaupt nicht, angenommen Klasse A hat eine protected-Methode, in einer A-Variablen steckt ein Objekt von B wo diese Methode public ist,
wenn jemand von z.B. innerhalb des packages auf die protected-Methode von A zugreifen kann, dann stört das nicht die Bohne, dass diese in B sogar public ist

vergleiche die Erweiterung der Sichtbarkeit mit Hinzufügen neuer Methoden
 

tsitra

Bekanntes Mitglied
Hi,

Wenn ich also eine Oberklasse mit einer public Methode habe, dann kann die Unterklasse davon die sichbarkeit auf private, protected oder "package" herunterstufen.

Das ist nicht richtig!
Wenn die Unterklasse eine Methode M1() der Oberklasse überschreibt, dann sind nur der gleiche
acces-modifier ODER WENIGER restriktive Modifier für M1() erlaubt.
Wenn eine Oberklasse eine private Methode hat, so kann die Unterklasse diese durch Überschreiben nicht auf public erweitern.
Richtig! Überschreiben hängt von vererben ab! Deshalb kann eine private Methode nämlich garnicht überschrieben werden, denn sie wird nicht veerbt!

Warum ist es also möglich eine protected Methode einer Oberklasse in einer Unterklasse auf public zu erweitern?
weil public weniger restriktiv ist als protected. Siehe oben.

Gruß
tsitra
 

BlubBlub

Bekanntes Mitglied
Jau da hab ich dann wohl richtig was durcheinandergebracht.
Wenn man nochmal darüber nachdenkt dann ist das wirklich recht einleuchtend.
Danke
 

Ähnliche Java Themen


Oben