Polymorphie und Dynamisches Binden richtig nutzen

Java4win

Aktives Mitglied
Hey ich habe einmal eine Frage bezüglich dieses Codes:
Java:
public class EineAufgabe{
    public static void main(String[] args) {
        Euro euro = new Euro(2);
        euro.print(); // Ausgabe: 2.0 Euro
        DM dm = new DM(4);
        dm.print(); // Ausgabe: 4.0 DM
        Lire lire = new Lire(600);
        lire.print(); // Ausgabe: 600.0 Lire
        euro.addiere(dm); // 2.0 Euro + 4.0 DM
        euro.print(); // Ausgabe: 4.045168 Euro
        lire.addiere(euro); // 6.0 Ellen + 3.216 Euro
        lire.print(); // Ausgabe: 8439.472868217055 Lire
    }
}

Mir ist klar das ich eine Oberklasse "Muenze" erstellen müsste und dort dann die Methode print() und addiere() rein schreibe, welche and die Unterklassen Euro, DM und Lire weiter gegeben werden.

Nur wie bekommt man es mittels Vererbung hin, dass die Werte umgerechnet werden, dies ist die Prämisse:
"Dabei gilt: 1 DM = 0.511292 Euro und 1 (italienische) Lire = 0.000516 Euro"
 

Java4win

Aktives Mitglied
@Javinner
Ich denke ich weiß was du meinst. Dann könnte ich über den Übergebenen Parameter den Wert umrechnen.
Jedoch habe ich bei diesem Gedankengang das Problem das, wenn ich z.B. bei
euro.addiere(lire);
und bei
dm.addiere(lire);
den selben Parameter zur Umrechnung benutzen würde und dementsprechend etwas falsche raus kommen würde...
 

Java4win

Aktives Mitglied
Das war ein guter Witz eigentlich müsste da stehen = 0.2 Euro.... :D
Ja die Aufgabenstellung sei mal dahingestellt:D

Aber ich glaube ich habe eine Idee:
Immer wenn ich eine neue Klasse übergebe, übergebe ich der Klasse zwei Werte einmal die Umrechnung nach Euro und einmal die Umrechnung von Euro zum eigenen Wert.
So hätte ich das auf Euro genormt und kann dementsprechend mit dem eigenen Wert weiter rechnen.
 

Javinner

Top Contributor
@Java4win
Du ich irrte mich im ersten Beitrag, ist keine gute Lösung.
Besser wäre es, wenn die jeweilige Klasse, außer Euro, den der gilt hier als der Verrechnungswert, den Verrechnungswert implementiert und beim Aufruf von X in der getValue()-Methode verrechnet.
Nur als kleines Beispiel, muss gleich weg:
Java:
public class TestAplication
{

    public static void main(String[] args)
    {
        Dollar firstDollar = new Dollar(100);
        Dollar secondDollar = new Dollar(100);
        Euro euro = new Euro(firstDollar.getValue() + secondDollar.getValue());
        System.out.println(euro);
        Dollar thirdDollar = new Dollar(10);
        double mEuroValue = euro.getValue();
        euro = new Euro(mEuroValue + thirdDollar.getValue());
        System.out.println(euro);

    }

}
/** Output */
Value: 190.0
Value: 199.5
Java:
public abstract class Currency
{

    public abstract double getValue();

}
public class Euro extends Currency
{
    private final double value;
    public Euro(double value)
    {
        this.value = value;
    }
    @Override
    public double getValue()
    {
        return this.value;
    }
   
    @Override
    public String toString()
    {
        return "Value: " + this.value;
    }
}
public class Dollar extends Currency
{
    private final double change_tax = 0.95;
    private final double value;
    public Dollar(double value)
    {
        this.value = value;
    }
    @Override
    public double getValue()
    {
        return this.value * this.change_tax;
    }
    @Override
    public String toString()
    {
        return "Value: " + this.value;
    }
}
 

Java4win

Aktives Mitglied
@Javinner
Okey, nur du hast jetzt lediglich zwei Klassen. Würdest du noch eine Dritte Währung mit rein nehmen,
könntest du nicht mehr so einfach sagen firstDollar.getValue();
dort würde ja dann der entsprechende Wert für Euro raus kommen... Dementsprechend müsstest du eine neue Methode in Dollar schreiben, die dann die Umrechnung in die neue Währung besitzt.
Weißt du was ich meine ?
 

Javinner

Top Contributor
@Java4win
Die abstrakte Currency dient hier als die Elternklasse für alle Währungen. Es hat den Vorteil, dass diese a) ein Satz gleichnamiger Methoden für alle Kinder der Klasse anbietet und b) später eventuell als Adapter fundieren kann und c) du hier kreuz und quer alle möglichen Währungen zu der jeweiligen Währung addieren kannst. Natürlich musst du die Methode noch implementieren. Als Gedanke: nicht nur Geld hat einen Geldwert, auch Wertgegenstände usw. Daher würde ich die entsprechende Methode in ein Interface auslagern. Denn im späteren Verlauf, wenn du dein ganzes Hab und Gut zählen willst, wirst du es um so einfacher haben ;) Ich will dir aber die Freude am Entdecken nicht nehmen.

Wenn du jetzt eine andere Währung erstellen solltest, dann sollte diese natürlich den Umrechnungswert zu Euro implementieren, siehe Dollar/change_tax. Aber es funktioniert weiterhin, kannst du mir folgen?
 

Robat

Top Contributor
Also wenn du festlegst, dass alle Währungen zu Euro umgerechnet werden um mit denen zu rechnen könnte eine mögliche Implementierung so aussehen.
Würde aber nicht meine Hand dafür ins Feuer legen, dass es die Beste Lösung ist. ;)

Sowohl die Berechnung, als auch die Ausgabe bleibt in der Currency Klasse welche beide Werte erst in ihren Euro-Betrag umrechnet, diese addiert und zum Schluss wieder in die gewünschte Währung des Objektes umrechnet.

Java:
public abstract class Currency {
    private double value;

    public Currency(int value) {
        this.value = value;
    }

    public void print() {
        System.out.println(String.format("%f %s", getValue(), getUnit()));
    }

    public void add( Currency c ) {
        double firstEuroValue = value * getCurrencyRate();
        double secondEuroValue= c.getValue() * c.getCurrencyRate();

        value = (firstEuroValue+ secondEuroValue) / getCurrencyRate();
    }

    public double getValue() {
        return value;
    }

    public abstract double getConcurrencyRate();
    public abstract String getUnit();
}

Java:
public class Lire extends Currency {
    public Lire(int value) {
        super(value);
    }

    @Override
    public double getCurrencyRate() {
        return 0.000516; // das für andere Währungen anpassen. Wert ist bezogen auf 1 EUR
    }

    @Override
    public String getUnit() {
        return "Lire"; // das für andere Währungen anpassen
    }
}

Java:
public class Euro extends Currency{
    public Euro(int value) {
        super(value);
    }

    @Override
    public double getCurrencyRate() {
        return 1d;
    }

    @Override
    public String getUnit() {
        return "Euro";
    }
}

Edit: Sollte natürlich Currency und nicht Concurrency heißen :p
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
T Beispiel Polymorphie, Tier hund = new Hund(); Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
T Polymorphie und LSP Java Basics - Anfänger-Themen 4
KogoroMori21 Polymorphie-Verständnis Java Basics - Anfänger-Themen 5
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
NeoLexx Zuweisungskompatibilität zwischen Vererbungsbeziehungen (Polymorphie) Java Basics - Anfänger-Themen 18
A Polymorphie Java Basics - Anfänger-Themen 4
O Polymorphie Java Basics - Anfänger-Themen 3
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
K Polymorphie Java Basics - Anfänger-Themen 6
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
C Kurze Frage zur Polymorphie Java Basics - Anfänger-Themen 1
J Polymorphie - Beispielcode Java Basics - Anfänger-Themen 7
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
T Polymorphie Java Basics - Anfänger-Themen 4
C Polymorphie - Erklärung bitte Java Basics - Anfänger-Themen 5
C Polymorphie Java Basics - Anfänger-Themen 1
L Polymorphie Polymorphie verstehen? Java Basics - Anfänger-Themen 2
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
N Methoden Polymorphie Java Basics - Anfänger-Themen 11
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
E Polymorphie Beispiel Polymorphie Java Basics - Anfänger-Themen 2
K Polymorphie und instanceOf Operator Java Basics - Anfänger-Themen 6
S Vererbung Objekte in verwandten Klassen (Kovarianz, Polymorphie) Java Basics - Anfänger-Themen 4
R Polymorphie Java Basics - Anfänger-Themen 2
M Vererbung Enum Vererbung/Polymorphie Java Basics - Anfänger-Themen 2
P Polymorphie Java Basics - Anfänger-Themen 6
xehpuk Polymorphie Polymorphie in Parametern Java Basics - Anfänger-Themen 5
S Polymorphie und Vererbung Java Basics - Anfänger-Themen 6
H Kleines Problem mit der Polymorphie Java Basics - Anfänger-Themen 2
A OOP Polymorphie Java Basics - Anfänger-Themen 6
2 Interfaces, Polymorphie und Methoden. Java Basics - Anfänger-Themen 14
C OOP Frage zu Polymorphie Java Basics - Anfänger-Themen 4
P Eine Frage begzl. Interface / Polymorphie Java Basics - Anfänger-Themen 11
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
F Verständnisfrage Objekt instanzierung / Polymorphie Java Basics - Anfänger-Themen 10
T Polymorphie:Überschreiben der Methode klappt nicht Java Basics - Anfänger-Themen 4
T Vererbung und Polymorphie Java Basics - Anfänger-Themen 7
C Unterschied zwischen Polymorphie und Typcasting Java Basics - Anfänger-Themen 10
S Polymorphie Verständnisproblem Java Basics - Anfänger-Themen 4
Z Vererbung oder Polymorphie? Java Basics - Anfänger-Themen 5
J Polymorphie Java Basics - Anfänger-Themen 6
G Polymorphie und Interface Java Basics - Anfänger-Themen 2
S Polymorphie und Vererbung Java Basics - Anfänger-Themen 25
S Polymorphie - oder auch spanisches Dorf? Java Basics - Anfänger-Themen 5
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 und statisches binden Java Basics - Anfänger-Themen 17
M Dynamisches Binden Java Basics - Anfänger-Themen 8
M dynamisches Clipboard mit Buttons Java Basics - Anfänger-Themen 5
J Dynamisches/Statisches Binden ?? Java Basics - Anfänger-Themen 5
R dynamisches binden Java Basics - Anfänger-Themen 3
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
P dynamisches Binden klappt nicht so recht Java Basics - Anfänger-Themen 7
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

Ähnliche Java Themen

Neue Themen


Oben