Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Kann mir bitte jemand sagen ob folgendes stimmt:
protected Methoden können nur von abgeleiteten Klassen überschrieben werden. Doch was mich verwirrt ist: Auf protected Attribute und Methoden können sowohl alle Klassen zugreifen, die sich im selben package befinden, als auch Klassen, die von dieser Klasse abgeleitet sind.
Na ja das mit der package visibility stimmt für das Keyword protected immer.
Aber es liegt nun mal in der Natur der Sache, dass du Methoden nur überschreiben kannst, wenn du von der enstprechenden Klasse ableitest, selbst wenn diese public sind.
Stimmt. Jede für andere Klassen sichtbare Methode kann von ihren Unterklassen überschrieben werden. Gilt also auch für public-Methoden und package protected (kein Deklarationstyp), sofern die erbende Klasse im selben package liegt!
Doch was mich verwirrt ist: Auf protected Attribute und Methoden können sowohl alle Klassen zugreifen, die sich im selben package befinden, als auch Klassen, die von dieser Klasse abgeleitet sind.
public, protected und private definieren die Sichtbarkeit.
public sollte selbsterklärend sein.
protected ist nur im package sichtbar , und also auch bei abgeleiteten Klassen.
Also kann man von außerhalb des package nicht darauf zugreifen.
private ist nur innerhalb der Klasse sichtbar. Das nennt sich Kapselung und ist notwendig, wenn man verhindern möchte, dass von außerhalb dieser Klasse Änderungen vorgenommen werden können.
Ist sicherlich etwas abstrakt und wird bei einem Beispiel nachvollziehbarer.
Im strikten Wortsinne stimmt das. Methoden können aber sowieso nur von abgeleiteten Klassen überschrieben werden. Was Du vielleicht meintest: "protected Methoden sind nur inabgeleiteten Klassen sichtbar." Das stimmt nicht. Sie sind in Klassen desselben Packages und zusätzlich in abgeleiteten Klassen sichtbar auch wenn diese ihrerseits nicht im selben Package liegen.
Falsch, sie sind in Klassen desselben Packages und zusätzlich in abgeleiteten Klassen sichtbar auch wenn diese ihrerseits nicht im selben Package liegen.
Kann mir bitte jemand sagen ob folgendes stimmt:
protected Methoden können nur von abgeleiteten Klassen überschrieben werden. Doch was mich verwirrt ist: Auf protected Attribute und Methoden können sowohl alle Klassen zugreifen, die sich im selben package befinden, als auch Klassen, die von dieser Klasse abgeleitet sind.
Falsch, sie sind in Klassen desselben Packages und zusätzlich in abgeleiteten Klassen sichtbar auch wenn diese ihrerseits nicht im selben Package liegen.
Falsch, sie sind in Klassen desselben Packages und zusätzlich in abgeleiteten Klassen sichtbar auch wenn diese ihrerseits nicht im selben Package liegen.
Dies gilt jedoch nicht für Konstruktor-Methoden und auch nicht für "normale" Methoden, wenn eine Instanz in der Kindklasse mit einem Kontruktor der Elternklasse aus einem anderen Paket erstellt werden soll und ebenfalls aus diesem Paket (der Elterklasse) auf die Instanz eine "protected" Methode angewendet werden soll.
-> Die Methode muss dann ebenfalls auf public gesetzt werden, andernfalls beschwert sich die IDE dass die Methode nicht sichtbar ist.
Erzeugt man hingegen in der Kindklasse in dem 2. Paket eine neue eigene Instanz per eigenem Konstruktor, so kann eine geerbte protected Method aus dem Paket der Eltern auf diese Instanz problemlos angewendet werden.