Hallo zusammen,
hab mal ne kleine Frage zum Thema dynamisches Binden und zwar:
Ich hab eine abstrakte super Klasse namens Base.
Von dieser Klasse leitete ich zwei Klassen (Sub_A und Sub_B) ab und hab dort die jeweiligen abstrakten Methoden implementiert.
Soweit so gut.
Eine der Subklassen (z.B. Sub_A) besitzt eine spezielle nicht abstrakte public - Methode. z.B. finishWriting()
Nun möchte ich in meiner main() - Methode je nach dem welche Eingabe kommt entscheiden welche Methoden aufgerufen werden sollen.
Das klappt ja auch mit den abstrakten Methoden sehr gut.
Ich hab das so gemacht:
Das Problem ist dass der Compiler meckert weil er angeblich die Methode finishWriting() nicht kennt. Das müsste er aber oder?
Warum ist das so??
Ich versteh das irgendwie nicht.
Kann mir jemand sagen was ich falsch mache?
Vielen Dank für jeden Tip...
hab mal ne kleine Frage zum Thema dynamisches Binden und zwar:
Ich hab eine abstrakte super Klasse namens Base.
Code:
public abstract class Base
{
public abstract void writeColumnHeaders( Hashtable htHeader ) throws IOException
public abstract void writeData( ) throws IOException;
}
Von dieser Klasse leitete ich zwei Klassen (Sub_A und Sub_B) ab und hab dort die jeweiligen abstrakten Methoden implementiert.
Soweit so gut.
Eine der Subklassen (z.B. Sub_A) besitzt eine spezielle nicht abstrakte public - Methode. z.B. finishWriting()
Nun möchte ich in meiner main() - Methode je nach dem welche Eingabe kommt entscheiden welche Methoden aufgerufen werden sollen.
Das klappt ja auch mit den abstrakten Methoden sehr gut.
Ich hab das so gemacht:
Code:
Base test = null; //erzeuge Basisobjekt
switch (iResult)
{
case 0:
test = new Sub_B(); //case 0: -->weise dem Superobjekt das Subobjekt Sub_B zu.
test.writeData( ); ruf die writeData() - Methode von Klasse Sub_B() auf --- das klappt
break;
case 1:
test = new Sub_A();
test.writeData( ); ruf die writeData() - Methode von Klasse Sub_A() auf --- das klappt
test.finishWriting(); //das klappt NICHT --->WARUM?!?!? HILFE
break;
}
Das Problem ist dass der Compiler meckert weil er angeblich die Methode finishWriting() nicht kennt. Das müsste er aber oder?
Warum ist das so??
Ich versteh das irgendwie nicht.
Kann mir jemand sagen was ich falsch mache?
Vielen Dank für jeden Tip...