Z
zoid
Gast
Hallo zusammen,
hätte 'ne kurze Frage zu Vererbung, stehe da irgendwie auf dem Schlauch.
Mache gerade die beliebte Übungsaufgabe rationale Zahlen und normierte rationale Zahlen zu implementieren.
Dabei erbt NormRational von Rational, so habe ich in der Rational-Klasse Methoden zur Addition geschrieben:
... wenn ich jetzt damit rechne liefert mir die Methode natürlich eine Rational zurück, auch wenn ich sie bei einer NormRational verwendet wird.
In NormRational wollte ich eigentlich nur die zwei Funktionen zum normieren/kürzen neu schreiben, und den Rest erben, dachte wäre Sinn der Sache. Allerdings bekomme ich so immer nen type mismatch, jedes mal casten ist auch nicht das gewünschte.
Jetzt habe ich die ".add" Methode überschrieben:
Macht man das so? Oder kann man das auch anders, einfacher oder mehr dem Java Konzept folgend haben?
Danke im voraus,
zoid
hätte 'ne kurze Frage zu Vererbung, stehe da irgendwie auf dem Schlauch.
Mache gerade die beliebte Übungsaufgabe rationale Zahlen und normierte rationale Zahlen zu implementieren.
Dabei erbt NormRational von Rational, so habe ich in der Rational-Klasse Methoden zur Addition geschrieben:
Code:
public class Rational {
long numerator; // Zähler
long denominator; // Nenner
...
public Rational(long numerator, long denominator) {
this.numerator = numerator;
this.denominator = denominator;
}
...
public void add(Rational r){
Rational q = Rational.add(this,r);
this.numerator = q.numerator;
this.denominator = q.denominator;
}
public static Rational add(Rational r, Rational q){
return new Rational(r.numerator * q.denominator + q.numerator * r.denominator,
r.denominator * q.denominator);
}
}
... wenn ich jetzt damit rechne liefert mir die Methode natürlich eine Rational zurück, auch wenn ich sie bei einer NormRational verwendet wird.
In NormRational wollte ich eigentlich nur die zwei Funktionen zum normieren/kürzen neu schreiben, und den Rest erben, dachte wäre Sinn der Sache. Allerdings bekomme ich so immer nen type mismatch, jedes mal casten ist auch nicht das gewünschte.
Jetzt habe ich die ".add" Methode überschrieben:
Code:
public void add(NormRational r){
Rational s = NormRational.add(this, r);
this.numerator = s.numerator;
this.denominator = s.denominator;
this.normalize();
}
public static NormRational add(NormRational r, NormRational q){
Rational s = Rational.add(r, q);
return new NormRational(s.numerator,s.denominator);
}
Macht man das so? Oder kann man das auch anders, einfacher oder mehr dem Java Konzept folgend haben?
Danke im voraus,
zoid