# vererbung und private



## Guest (8. Feb 2006)

Hallo zusammen,
hab eigentlich nur eine "einfache" Frage:
Werden Attribute die als private gesetzt wurden vererbt?

thx


----------



## Bleiglanz (8. Feb 2006)

Ja, insofern dass das Feld vorhanden ist

Manipuliert werden kann es aber nur in der Oberklasse

=> praktisch völlig egal, da in den Unterklasse nicht sichtbar: man kann dort problemlos Variablen und Methoden mit dem gleichen Namen verwenden

also vielleicht ist "Nein" doch die bessere Antwort...


----------



## Jouhni (14. Feb 2006)

Eigentlich ist es doch so: private-Attribute werden vererbt, nur kann auf sie in Unterklassen nicht direkt zugegriffen werden, sondern nur über Getter-/Setter-Methoden.

Jouhni


----------



## SebiB90 (14. Feb 2006)

Bleiglanz hat gesagt.:
			
		

> => praktisch völlig egal, da in den Unterklasse nicht sichtbar: man kann dort problemlos Variablen und Methoden mit dem gleichen Namen verwenden


was ich mich schon immer frage, wenn ich jetzt eine private methode "überschreibe", naja überschreiben ist es ja nicht da ja unbekannt ist, aber man implementiert eine methode mit dem gleichen namen(und gleichen parametern)
in der oberklasse gibt es eine methode die diese private methode benutzt, wenn ich jetzt eine instanz der subklasse habe und jetzt die methode, die die private methode benutzt, von der oberklasse aufrufe, welche private methode wird dann aufgerufen? die von der oberklasse oder die von der unterklasse?


----------



## Beni (14. Feb 2006)

Probiers doch aus :wink:

Die Oberklasse benutzt ihre eigene private Methode, die Unterklasse die andere. Private Methoden kann man so gesehen gar nicht überschreiben.


----------



## rapthor (28. Feb 2006)

Beni hat gesagt.:
			
		

> Die Oberklasse benutzt ihre eigene private Methode, die Unterklasse die andere. Private Methoden kann man so gesehen gar nicht überschreiben.



Man mag sie zwar nicht im eigentlichen Sinne überschrieben haben, aber der Effekt bleibt derselbe: Die Methode der Oberklasse bildet eine andere Funktionalität ab als die Methode der Unterklasse.

Will man das unbewusste, versehentliche Neudefinieren einer Methode in der Unterklasse verhindern, sollte man in der Oberklasse die Methode nicht nur *private*, sondern auch *final *deklarieren. Somit meldet der Compiler einen Fehler, wenn versucht wird, eine Methode gleichen Namens und gleicher Signatur in der erbenden Klasse zu definieren.


----------



## Bleiglanz (2. Mrz 2006)

> Will man das unbewusste, versehentliche Neudefinieren einer Methode in der Unterklasse verhindern


Warum sollte man das tun? Ist doch völlig egal??

wenn ich private foo() deklariert habe und meine Klasse in die Wildnis entlasse dann WEISS ein Anwender gar nichts davon und könnte versehentlich auch auf den Namen foo() kommen...

BTW: auch das final ändert nichts, der Compiler meckert nicht und man kann einen Namen ohne Probleme wiederverwenden


----------

