dynamisches Binden klappt nicht so recht

Status
Nicht offen für weitere Antworten.

progster

Mitglied
Hallo zusammen,

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...
 

hupfdule

Top Contributor
test ist vom Typ Base und Base hat keine solche Methode. Dass dahinter tatsächlich eine Sub_A steht, weil der Compiler nicht. Du musst also Base erst nach Sub_A casten, damit du die Methode aufrufen kannst.
 

hupfdule

Top Contributor
Nein, das musst du selbst wissen. Wenn du nur an dieser einen Stelle spezifisch sein musst, dann caste dort, wo du finishWriting aufrufst. Ansonsten halt schon eher. Das musst du aber selbst wissen.

wie ich das am besten caste?
Da gibts nicht so viele Möglichkeiten. ;-)
Wenn du nur diesen einen Funktionsaufruf spezifisch hast, dann so:
Code:
((Sub_A)test).finishWriting();
sonst so:
Code:
Sub_A a= (Sub_A) test;
a.finischWriting();
 

progster

Mitglied
Ahhh, vielen Dank....
habs gefressen.

Finds aber trotzdem blöd dass ich das Ding noch casten muss auch wenn ich beim Erzeugen des Sub_A Objects dem Base - Objekt ja schon sage dass es sich um ein Sub_A Object handelt. Aber egal - ich nehms wies ist.
Vielleicht hab ich mir vom dynamischen zuviel versprochen.


Grüsse
 

hupfdule

Top Contributor
progster hat gesagt.:
Finds aber trotzdem blöd dass ich das Ding noch casten muss auch wenn ich beim Erzeugen des Sub_A Objects dem Base - Objekt ja schon sage dass es sich um ein Sub_A Object handelt.
Nein, das ist genau so wie es sein soll. Stichwort Polymorphie. Du wirst früher oder später genau diese Verhalten begrüßen. :)
 

progster

Mitglied
Kannst du mir sagen in welchem Anwendungsfall genau dieses Verhalten wünschenswert ist.

Vielleicht anhand eines kleinen Beispiels.
Bisher wärs mir anders irgendwie lieber ???:L
 

Leroy42

Top Contributor
Ihr habt beide nicht Unrecht!

In Smalltalk würde progster's Vorgehensweise funktionieren, da
Variablen dort nicht typisiert sind.

Wenn man dann eine Methode aufruft, die in der Klasse des
aktuellen Objekts nicht definiert ist,

Code:
| einFlugzeug |
einFlugzeug := FordCapri new.
einFlugzeug fliegNach: "Pakistan".

kommt der allseits beliebte Fehler "FordCapri does not understand fliegNach:"
zur Laufzeit

Um soetwas zu vermeiden, ist Java streng typisiert und ein Base ist eben kein Sub_A
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Polymorphie und Dynamisches Binden richtig nutzen Java Basics - Anfänger-Themen 11
M Dynamisches und statisches binden Java Basics - Anfänger-Themen 17
M Dynamisches Binden Java Basics - Anfänger-Themen 8
J Dynamisches/Statisches Binden ?? Java Basics - Anfänger-Themen 5
R dynamisches binden Java Basics - Anfänger-Themen 3
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
O Schlange als dynamisches Feld - Aufwand Java Basics - Anfänger-Themen 16
S Klassen Objekt- Tabelle / Dynamisches 2Dimensionales Array für Objekte Java Basics - Anfänger-Themen 6
C Erste Schritte Dynamisches Array Java Basics - Anfänger-Themen 11
T Dynamisches abarbeiten von statischen Methode aus verschiedenen Klassen. Java Basics - Anfänger-Themen 5
U Klassen Dynamisches Casten? Java Basics - Anfänger-Themen 39
X Methoden [GWT] Dynamisches Textfeld PopUp erstellen Java Basics - Anfänger-Themen 6
L dynamisches erzeugen von array Listen Java Basics - Anfänger-Themen 7
R dynamisches zweidimensionales Feld erzeugen Java Basics - Anfänger-Themen 8
A dynamisches Array - Index Liste Java Basics - Anfänger-Themen 2
maddin86 3 Dateien gleichzeitig speichern in dynamisches Benutzerverzeichnis (Windows) Java Basics - Anfänger-Themen 4
A dynamisches Array simulieren Java Basics - Anfänger-Themen 8
M Dynamisches Casten mal wieder Java Basics - Anfänger-Themen 4
A Dynamisches casten Java Basics - Anfänger-Themen 19
M dynamisches Clipboard mit Buttons Java Basics - Anfänger-Themen 5
K dynamisches Array Java Basics - Anfänger-Themen 13
M Zweidimensionales dynamisches Array füllen Java Basics - Anfänger-Themen 2
Bernasconi dynamisches JDialog Java Basics - Anfänger-Themen 2
R Dynamisches Gegenerieren von Objekten Java Basics - Anfänger-Themen 25
S dynamisches array + konstruktor Java Basics - Anfänger-Themen 5
K dynamisches Array erzeugen Java Basics - Anfänger-Themen 5
X SelectManyCheckbox an SelectOneRadio binden? Java Basics - Anfänger-Themen 3
V kann ich eine TextProperty an eine booloan variabel binden ? Java Basics - Anfänger-Themen 2
S Problem bei dynamischen Binden für Refaktorisierung Java Basics - Anfänger-Themen 2
F Frage über Statisches binden Java Basics - Anfänger-Themen 1
T externe Datei fest an Projekt binden Java Basics - Anfänger-Themen 2
S Vector an Typ binden Java Basics - Anfänger-Themen 7
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
F jsoup einloggen klappt nicht Java Basics - Anfänger-Themen 10
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
nbergmann Umgebungsvariablen einstellen unter Windows 7 klappt nicht Java Basics - Anfänger-Themen 2
C Erste Schritte Insert Into klappt nicht Java Basics - Anfänger-Themen 6
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
L Resourcen laden klappt nicht Java Basics - Anfänger-Themen 2
L Variablen Einheiten umrechen klappt nicht Java Basics - Anfänger-Themen 16
I Schleifendurchlauf ab 2. Durchlauf klappt nicht Java Basics - Anfänger-Themen 10
J Objecte in TreeSet einfügen klappt nicht Java Basics - Anfänger-Themen 5
J Datei auslesen klappt nicht Java Basics - Anfänger-Themen 4
K Methoden Pause drücken klappt nur jedes 2. Mal Java Basics - Anfänger-Themen 6
S UserPref und Java Application klappt immer nicht. Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
S clip.loop(Clip.LOOP_CONTINUOUSLY); stoppen klappt nicht! Java Basics - Anfänger-Themen 11
Z Lotto-Programm Wieso klappt das? Java Basics - Anfänger-Themen 8
J Erste Schritte Zweithöchster Wert eines Arrays herausfinden - warum klappt mein Code nicht? Java Basics - Anfänger-Themen 3
D Telefon programmieren klappt nicht. Java Basics - Anfänger-Themen 5
VfL_Freak Tastaturabfrage auf '@' klappt nicht :-( Java Basics - Anfänger-Themen 1
M Image Download klappt nicht mehr Java Basics - Anfänger-Themen 4
B Erste Schritte Vererbung klappt nicht Java Basics - Anfänger-Themen 24
M zufälliges Setzen von Schiffen in while klappt nicht immer Java Basics - Anfänger-Themen 3
S Date parsen klappt nicht richtig Java Basics - Anfänger-Themen 3
K RGB Wert Heller machen (Dunkler machen klappt) Java Basics - Anfänger-Themen 2
K Einlesen einer txt von BufferedReader klappt nicht wie gewünscht Java Basics - Anfänger-Themen 12
D Rekursiv Kombinationen ausgeben klappt nur bei einer Wiederholung Java Basics - Anfänger-Themen 4
H Runden klappt nicht Java Basics - Anfänger-Themen 10
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
K CompareTo zwei mal benutzen klappt nicht. Java Basics - Anfänger-Themen 2
T Sortieren/Suche klappt nicht ganz (String Array) Java Basics - Anfänger-Themen 2
J Erste Schritte Bin ein Programm am schreiben klappt aber nicht und weis nicht warum Java Basics - Anfänger-Themen 20
F Dateien lesen klappt nicht Java Basics - Anfänger-Themen 2
Kenan89 Export klappt nicht Java Basics - Anfänger-Themen 2
K Serialisierung: speichern und auslesen, auslesen klappt nicht Java Basics - Anfänger-Themen 14
M Dividieren bei Grafischem Taschenrechner klappt nicht Java Basics - Anfänger-Themen 2
J Einem String-Array in einer for-Schleife Strings zuweisen - Klappt nicht in einer for-Schleife Java Basics - Anfänger-Themen 5
K Frame öffnen klappt nicht?! Java Basics - Anfänger-Themen 36
C Methoden Negativer Wert klappt nicht Java Basics - Anfänger-Themen 4
M Datei löschen, klappt nicht Java Basics - Anfänger-Themen 3
J Compiler-Fehler Eclipse .jar Export klappt nicht. Java Basics - Anfänger-Themen 17
A Oracle Verbindungsaufbau klappt nicht Java Basics - Anfänger-Themen 7
GianaSisters Erste Schritte Datei umbennen bzw verschieben klappt nicht Java Basics - Anfänger-Themen 6
Z Speichern in eine .txt klappt.. fast Java Basics - Anfänger-Themen 23
T pattern klappt nicht so Java Basics - Anfänger-Themen 6
U Automatenprüfung in Java implementieren — String Vergleich klappt nicht Java Basics - Anfänger-Themen 40
K Klassenumbenennung klappt nicht Java Basics - Anfänger-Themen 11
M Synchronized klappt nicht Java Basics - Anfänger-Themen 11
I .csv-Datei einlesen klappt aber kann nicht in String geschrieben werden!?!?! Java Basics - Anfänger-Themen 11
N Serialization, Laden klappt nicht wenn die Klasse geändert wurde Java Basics - Anfänger-Themen 3
D Jar klappt nicht trotz main Methode Java Basics - Anfänger-Themen 19
M Will Sudokus basteln - klappt net Java Basics - Anfänger-Themen 5
R fireTableDataChanged klappt nicht Java Basics - Anfänger-Themen 7
M methoden aufruf klappt nicht Java Basics - Anfänger-Themen 6
T Override klappt nochmal wie? Java Basics - Anfänger-Themen 3
I 1 Frame und mehrere Panels klappt nicht Java Basics - Anfänger-Themen 4
C SELECT klappt INSERT klappt nicht!!!??? Java Basics - Anfänger-Themen 3
Luk10 Aufrufen klappt nicht! Java Basics - Anfänger-Themen 7
A Quicksort, #Vergleiche zählen klappt nicht Java Basics - Anfänger-Themen 3
raptorrs Schreiben in Properties-File klappt nicht Java Basics - Anfänger-Themen 6
T JComboBox klappt nur ein- bis zweimal auf Java Basics - Anfänger-Themen 30
T Polymorphie:Überschreiben der Methode klappt nicht Java Basics - Anfänger-Themen 4
Gonzalez Eingabe des Benutzers mittels readLine()-Methode. Klappt in meinem Beispiel nicht! Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben