"Virtuelle Funktionen"/Polymorphie in Java

vega_ffm

Grünschnabel
Hi Leute! :)

Ich möchte folgendes realisieren:

Es existiert eine abstrakte Basisklasse "Flaeche". Von dieser Klasse wurden abgeleitet "Rechteck", "Dreieck" und sagen wir mal eine von "Rechteck" abgeleitete Klasse "Quadrat".

Nehmen wir nun an diese Klassen haben alle eine Funktion "berechneFlaeche".

Wenn ich nun von diesen Klassen 3 Instanzen erstelle, kann ich die "berechneFläche"-Funktion aufrufen. Zum Beispiel durch:

Wichtiger Hinweis: Bitte ignoriert beim folgenden Beispiel Rückgabe-/und Übergabewerte, es geht nur ums Prinzip und ich möchte es kurz halten.
Code:
Rechteck myRechteck = new Reckteck();
Quadrat myQuadrat  = new Quadrat();
Dreieck myDreieck = new Dreieck();
jetzt möchte ich aber nicht ausgeben über:
Code:
myRechteck.berechneFlaeche(); //gibt die Fläche "über System.out.println" aus
....
...

Sondern:
Code:
Flaeche[] myArray = new Flaeche[10];
Flaeche[0]=myRechteck;
Flaeche[1]=myQuadrat;
Flaeche[2]=myDreieck;

for(i=0;i<3;i++) Flaeche[i].berechneFlaeche();


Unter C++ funktioniert das über virtuelle Funktionen. Dabei erstellt man ein Pointer Array der Basisklasse und speichert dann die Adressen der Instanzen darin.

Gibt es so etwas (das automatische Erkennen der zutreffenden Funktion) auch unter Java?

Liebe Grüße,
vega_ffm
 
Du brauchst einfach nur einen Prototyp der Berechnungsmethode in deiner Flaechen Klasse von der dann alle anderen ableiten.

Von daher sollte das ohne Probleme so funktionieren....daher weiß ich nicht wo da das Problem ist. Vielleicht ist das einzigste Problem, dass die Grundklasse abstrakt ist.
 
Wahrscheinlich reicht doch ein Interface bei dir oder?
Java:
public interface Flaeche {
public void berechneFlaeche();
}

Abstrakte Klasse:
Java:
public abstract class Flaeche {
public abstract void berechneFlaeche();
}

Java:
public class Rechteck implements Flaeche { // extends Flaeche bei abstrakter Klasse
public Rechteck(int breite, int hoehe) {
 ...
}

public void berechneFlaeche(){
System.out.println(breite * hoehe);
}
}
 
Zurück