# In Subklasse auf private Variablen zugreifen



## Salamanda (17. Mai 2008)

Hallo, 

nehmen wir an, wir erstellen eine Subklasse von einer Klasse. Also z.B.:

```
public class Subclass extends Superclass
```

In dieser Subklasse soll eine Methode  aus der 'Superclass' überschrieben werden.  

In der überschriebenen Methode soll jetzt sozusagen zwischendrin im Original Code was geändert werden. 
Deswegen hilft es hier nicht, per 'super.methodenName()' die alte Methode zuerst aufzurufen, und dann den neuen Code anzufügen. 

Man muss also den den ganzen Original Code von der Methode kopieren, und in die überschriebene Methode einfügen, und dort dann die Änderungen machen. 

Soweit eigentlich auch erstmal kein Problem. Jetzt aber zum Problem. 
In diesem Code wird auch auf private Variablen und Funktionen zugegriffen. Auf diese hat die Subklasse keinen Zugriff. 
Ist somit also erstmal nicht machbar.  

Eine Möglichkeit wäre jetzt, in der 'Superclass' diese Variablen und Funktionen z.b. auf protected zu setzen. Aber das sieht sehr nach einer unsauberen Lösung aus. 

Wir gehen jetzt auch mal davon aus, das die 'Superclass' nicht eine selber erstellte Klasse ist, wo man solch eine Änderung noch in Kauf nehmen könnte, sondern das dies z.B. eine Klasse aus der Java Bibliothek ist, die man verändern möchte. Da will man ja ungern was an der Original Klasse rumfummeln.

Was gibt es da sonst noch für Möglichkeiten?


----------



## Beni (17. Mai 2008)

Wenn man die Klasse selbst ändern kann, macht man am einfachsten ein paar getter/setter-Methoden (die können public oder protected sein).

Falls die Klasse von einer Bibliothek kommt:
- könnte man Reflection benutzen, das ist langsam und unsicher.
- könnte man einen anderen Weg suchen, der aber vom _konkreten Problem_ (Wink mit dem Zaunpfahl :wink: ) abhängt.


----------



## Salamanda (17. Mai 2008)

Beni hat gesagt.:
			
		

> - könnte man einen anderen Weg suchen, der aber vom _konkreten Problem_ (Wink mit dem Zaunpfahl :wink: ) abhängt.



Schwierig. Im konkreten Fall geht es gar nicht um Java, sondern Actionscript-3   :wink: 
Dort konnte mir aber keiner helfen, deswegen habe ich es hier versucht, weil ich dachte, das es eher ein allgemeines Problem von OOP ist, unabhängig der Sprache.


----------



## Wildcard (17. Mai 2008)

> weil ich dachte, das es eher ein allgemeines Problem von OOP ist, unabhängig der Sprache.


Von der OOP Sicht her, will die Klasse dieses Implementierungsdetail nicht nach aussen veröffentlichen und verbietet das von dir gewünschte daher.
Demzufolge ist es also kein OOP Problem, sondern ein 'Feature'  :wink:


----------



## Salamanda (17. Mai 2008)

Wildcard hat gesagt.:
			
		

> Von der OOP Sicht her, will die Klasse dieses Implementierungsdetail nicht nach aussen veröffentlichen und verbietet das von dir gewünschte daher.
> Demzufolge ist es also kein OOP Problem, sondern ein 'Feature'  :wink:



Stimmt, hast auch wieder recht   

Das ärgerliche hier ist, das die eigentliche Änderung gar nicht diese privaten Variablen u. Funktionen betrifft.  
Also die Änderungen wären sozusagen erlaubt. Nur muss ich zwangsläufig auch den restlichen Code, der nicht verändert wird, hinzufügen, und dort kommen diese privaten Variablen usw. vor. 

Naja, konnte es in diesem Fall zum Glück nochmal irgendwie anders gelöst bekommen. Wäre aber schöner gewesen das über eine Subklasse gelöst zu haben.


----------

