Methodenvererbung durch eine Superklasse

kossy

Bekanntes Mitglied
Hallo zusammen !

Ich wollte mal etwas zum Thema Vererbung erfragen. Gehen wir einmal davon aus, dass ich zwei Klassen habe, Klasse A und Klasse B und die Klasse A durch die Klasse B erweitert wird (also B erweitert die Oberklasse A).

Wenn Klasse A jetzt eine Methode besitzt, die auch in der Klasse B verfügbar sein soll (ich gehe jetzt mal davon aus, dass beide Klasse sich im selben Paket befinden), macht es in Bezug auf saubere OOP immer Sinn, diese Methode mit protected zu deklarieren, oder kann man sie auch ruhig private setzen.

Grüße
Kossy
 
Sie muss protected sein. Private Methoden aus A sind in B nicht sichtbar. In Deiner speziellen Konstellation ginge auch noch package-private (also kein Zugriffsmodifizierer).
 
Hallo !

Danke für die Antwort.

Aber es ist doch möglich (und so wie ich es verstanden habe durchaus gängige Praxis), Attribute in einer Oberklasse private zu deklarieren und dann wären sie auch in den Subklassen sichtbar.

Hier würde der private Modifikator funktionieren, ist das nur bei Methoden so, dass sie explizit portected gesetzt werden müssen?

Danke !

Grüße
Kossy
 
Probiers doch aus?

Private bedeutet nur innerhalb der gleichen Klasse.

Diese siehst du nicht in den Vererbten.
 
Aber es ist doch möglich (und so wie ich es verstanden habe durchaus gängige Praxis), Attribute in einer Oberklasse private zu deklarieren und dann wären sie auch in den Subklassen sichtbar.

Hier würde der private Modifikator funktionieren, ist das nur bei Methoden so, dass sie explizit portected gesetzt werden müssen?
Da irrst Du in zwei Punkten:
  1. Zugriffsmodifikatoren bewirken bei Methoden und Feldern das selbe. Es gibt keinen Unterschied.
  2. Private Felder/Methoden sind nur innerhalb der Klasse sichtbar nicht in Unterklassen, nicht in Klassen desselben Packages oder sonstwo.
 
Hallo nochmal !

Setze ich dann Attribute ebenfalls auf protected, oder lasse ich den Modifikator evtl. sogar ganz weg?

Grüße
Kossy
 
Wie wäre es damit, wenn du, bzw. dein Zweitaccount DennisXX, einfach mal die Grundlagenliteratur und Google bemühen würdest, anstatt hier ca. 1000 ähnlich dumme Fragen zu stellen?
 
Setze ich dann Attribute ebenfalls auf protected, oder lasse ich den Modifikator evtl. sogar ganz weg?
Kommt drauf an, welche Sichtbarkeit Du brauchst. Obwohl es bei nicht finalen Instanzvariablen tendenziell eher besser ist, sie private zu machen und den Zugriff nur über Methoden (die dann natürlich != private sind) zu zu lassen.
 

Zurück
Oben