# Zugriff auf Superklasse



## Guest (16. Jun 2005)

Hallo,

Ich erstelle in meiner Superklassse Wald ein Objekt Eiche

```
Eiche Eiche = new Eiche();
```
Somit habe ich Zugriff auf die Methoden in der Klasse Eiche

```
Eiche.getHoehe();
```
Was muss ich aber tun, um in der Klasse Eiche (die abgeleitet ist aus der Klasse Wald) Parameter aus der Klasse Wald zu bekommen.
Etwa die Anzahl der Eichen im Wald. Immerhin habe ich in der Klasse Wald eine bestimmte Anzahl von Bäumen verschiedener Art, die ich in der Klasse Wald sortiere (Birke, ...).
Muss ich da ein Objekt erschaffen?

```
Wald eichenanzahl = new Wald();
```

oder wie?

danke


----------



## Wildcard (16. Jun 2005)

Also das gibt für mich keinen Sinn...
Eiche ist ein Baum.
Wald ist eine Ansammlung von Bäumen.
Wie kann dann Eiche eine Erweiterung von Wald sein  ???:L


----------



## Guest (16. Jun 2005)

ich habe mir das so vorgestellt:
Klasse Wald
Klasse Eiche extends Wald

Ist das Falsch?

Beim GregorianCalendar ist es doch auch so. wenn ich etwas spezifischeres benötige, so muss ich von GregorianCalendar ableiten.

[/code]


----------



## Wildcard (16. Jun 2005)

class Baum
class Eiche extends Baum
gibt Sinn da eine Eiche ein spezieller Baum ist.
Aber findest du wirklich das eine Eiche ein spezieller Wald ist  :wink:


----------



## Guest (16. Jun 2005)

gut, hast recht. werde die klasse wald in baum umbenennen. mein problem ist aber damit nicht gelöst.
nämlich, wenn ich in der klasse eiche auf methoden oder parameter der klasse baum zugreifen möchte.

1) macht man das?
2) wenn ja - wie?


----------



## mic_checker (16. Jun 2005)

guckst du nach super.

so kannst du methoden aus der superklasse aufrufen etc.


----------



## Wildcard (16. Jun 2005)

Das hängt von der Sichtbarkeit deiner Methoden und Felder ab. 
Alles was in der Super-Klasse private ist siehst du nicht, auf alles andere kannst du genauso zugreifen als währen es
deine eigenen Methoden/Felder.
Der beste Weg ist über getter/setter zu gehen und alle Felder private zu machen (gibt da ein paar Ausnahmen, aber das sind eben Ausnahmen  :wink: )
Wenn du eine Methode der Super-Klasse überschrieben hast, kannst du 

```
super.überschriebenMethode()
```
 aufrufen

edit:
2/8


----------



## mic_checker (16. Jun 2005)

Um in einer Subklasse (direkten) Zugriff auf die Variablen der Superklasse zu haben, kannst du auch protected verwenden.

Aber wie Wildcard vollkommen korrekt geschrieben hat, sollte man in der Regel die Felder etc. private machen und getter/setter schreiben....


----------



## Guest (16. Jun 2005)

ich habe gerade ausprobiert was ihr mir geschrieben habt.
dann müsste doch folgendes funktionieren:

in der superklasse:
in einem arrylist halte ich mir die anzahl von eichen in einem wald. (ich weiss das ist schwachsinn, ist aber grundlage für weiteres - mehr wälder). egal es geht mir ums prinzip.
das habe ich wie folgt deklariert:

```
private ArrayList baumEiche = new ArrayList();
  .
  .  
  .
public ArrayList getAnzahlEiche() {
  return baumEiche;
}
```

und in der Subklasse


```
public Eiche() {
  super.getAnzahlEiche();
}
```

Obwohl die ArraList baumEiche Werte enthält bekomme ich in der Subklasse immer ein leeres Feld. Da hab ich noch wo einen Fehler!

Danke


----------



## mic_checker (16. Jun 2005)

Du willst ne neue Eiche erzeugen, warum rufst du dann die Methode getAnzahlEiche der Superklasse auf ?
Das eine hat doch nichts mit dem anderen zu tun.


----------



## Guest (16. Jun 2005)

weil ich in der superklasse die eichen bereits gezählt habe. ich brauche die anzahlEichen in der superklasse und in der subklasse.


----------



## Roar (16. Jun 2005)

wenn du eine neue Eiche instantiierst wird auch ein neues ArrayList objekt angelegt. spricht: das bringt nix.


----------



## Guest (16. Jun 2005)

was heißt das? das alle meine einträge in der arraylist der superklasse gelöscht werden?


----------



## Wildcard (16. Jun 2005)

Jedesmal wenn irgendwo 'new' steht wird ein neues Objekt erzeugt mit eigenen Variablen erzeugt.
Ich empfehle dir dringend erstmal ein Buch durchzulesen zB http://www.galileocomputing.de/openbook/javainsel4/


----------

