Vererbung Probleme bei Array und Vererbung

brainox

Mitglied
Hallo,
Ich übe gerade an paar Aufgaben für die Uni und muss als typische Beispielaufgabe Klasse Konto und Girokonto und Sparkonto, die von Konto erben erstellen.
Jetzt soll ich am Ende ein Testkonto erzeugen mit nem Array, der Girokonten und Sparkonten erhalten soll.
Das array muss ja dann von der klasse konto sein(etwa so):
Java:
       Konto2 konten[] = new Konto2[2];
		konten[0] = new SparKonto("Musterfrau", 2);
		konten[1] = new GiroKonto("Mustermann", 3);

Die Frage ist jetzt kann ich irgendwie auf die Methoden, die ich in SparKonto und GiroKonto habe aber nicht in der Klasse Konto2 zugreifen. Also quasi:
Java:
konten[0].setIrgendwas(Irgendwas);

Vielen Dank im Vorraus und wenn weitere informationen benötigt werden stell ich sie rein
 
Du musst die Objekte dann casten:
Java:
SparKonto sparKonto = (SparKonto)konten[0];
 
Hallo,
Ich übe gerade an paar Aufgaben für die Uni und muss als typische Beispielaufgabe Klasse Konto und Girokonto und Sparkonto, die von Konto erben erstellen.
Jetzt soll ich am Ende ein Testkonto erzeugen mit nem Array, der Girokonten und Sparkonten erhalten soll.
Das array muss ja dann von der klasse konto sein(etwa so):
Java:
       Konto2 konten[] = new Konto2[2];
		konten[0] = new SparKonto("Musterfrau", 2);
		konten[1] = new GiroKonto("Mustermann", 3);

Die Frage ist jetzt kann ich irgendwie auf die Methoden, die ich in SparKonto und GiroKonto habe aber nicht in der Klasse Konto2 zugreifen. Also quasi:
Java:
konten[0].setIrgendwas(Irgendwas);

Vielen Dank im Vorraus und wenn weitere informationen benötigt werden stell ich sie rein

Die frage ist, WARUM besitzt Konto2 diese Klassen nicht? Konto2 ist die Klasse, von der geerbt wird nehme ich an?

Methoden wie einzahlen(), auszahlen(), die JEDES Konto hat solltest du direkt in Konto2 packen. Somit kannst du auch ohne zu casten direkt zugreifen.

Methoden, die zwar jedes Konto hat, die aber bei jedem Konto anders umgesetzt sind (beispielsweise berechneZinsen(), da jedes Konto andere Zinsen zahlt) solltest du als abstract in der klasse Konto2 definieren. Somit "kennt" Konto2 auch diese Methoden (Konto2 weiß, dass es diese in den Kindklassen geben muss. Wie genau diese umgesetzt sind ist für Konto2 ja egal) und du kannst sie ebenfals ohne casten nutzen.
 
Die frage ist, WARUM besitzt Konto2 diese Klassen nicht? Konto2 ist die Klasse, von der geerbt wird nehme ich an?

Methoden wie einzahlen(), auszahlen(), die JEDES Konto hat solltest du direkt in Konto2 packen. Somit kannst du auch ohne zu casten direkt zugreifen.

Methoden, die zwar jedes Konto hat, die aber bei jedem Konto anders umgesetzt sind (beispielsweise berechneZinsen(), da jedes Konto andere Zinsen zahlt) solltest du als abstract in der klasse Konto2 definieren. Somit "kennt" Konto2 auch diese Methoden (Konto2 weiß, dass es diese in den Kindklassen geben muss. Wie genau diese umgesetzt sind ist für Konto2 ja egal) und du kannst sie ebenfals ohne casten nutzen.

Hallo,
ich sollte nämlich auch Methoden in die Klasse GiroKonto und SparKonto schreiben, die es in der Konto2 Klasse nicht gibt z.b. dispokredit bei girokonto
 
Hallo,
ich sollte nämlich auch Methoden in die Klasse GiroKonto und SparKonto schreiben, die es in der Konto2 Klasse nicht gibt z.b. dispokredit bei girokonto

Du könntest diese in Konto2 als abstract implementieren und bei GiroKonto dann
Java:
public int dispokredit(){
    return 0;
}

beispielsweise, als Dispolimit 0
 
Du könntest diese in Konto2 als abstract implementieren und bei GiroKonto dann
Java:
public int dispokredit(){
    return 0;
}

beispielsweise, als Dispolimit 0

mhm - find ich nicht unbedingt immer die beste loesung. Wenn es eine Logik in der Subklasse gibt, mit der die Superklasse nix anfangen kann so sollte diese nicht dort "reingedrueckt" werden.

Wuerdest du in der klasse Mensch die Methode "getNextMenstruation" reinschreiben, nur weil bei Frauen das relevant ist und somit die Maenner irgendeinen Default wert bekommen ? (sorry kein besseres Bsp eingefallen).

Wenn es Eigenschaften gibt, die nur fuer die Subklassen von Relevanz sind gehoeren sie dorthin und nicht in die Oberklasse.
 
mhm - find ich nicht unbedingt immer die beste loesung. Wenn es eine Logik in der Subklasse gibt, mit der die Superklasse nix anfangen kann so sollte diese nicht dort "reingedrueckt" werden.

Wuerdest du in der klasse Mensch die Methode "getNextMenstruation" reinschreiben, nur weil bei Frauen das relevant ist und somit die Maenner irgendeinen Default wert bekommen ? (sorry kein besseres Bsp eingefallen).

Wenn es Eigenschaften gibt, die nur fuer die Subklassen von Relevanz sind gehoeren sie dorthin und nicht in die Oberklasse.

In deinem Beispiel hättest du recht. Allerdings finde ich dennoch, dass das Dispolimit in jedes Konto gehört, denn jedes Konto besitzt auch ein Dispolimit. Ein Girokonto hat halt das Limit bei 0.

Ob du nun im Späteren Code testest, ob es ein Girokonto ist und somit ein Dispolimit von 0 hat oder ob es innerhalb der Giro-Klasse die Methode gibt, die das Dispolimit = 0 zurückgibt macht keinen großen unterschied...
 

Zurück
Oben