Vererbung änderung des Konstruktors

Diskutiere Vererbung änderung des Konstruktors im Java Basics - Anfänger-Themen Forum; Guten Tag zusammen, ich komme mal wieder bei einer Aufgabe nicht weiter :( Wir haben eine Rational Klasse bekommen die ich etwas abgeändert habe...

  1. ocsme
    ocsme Aktives Mitglied
    Guten Tag zusammen,

    ich komme mal wieder bei einer Aufgabe nicht weiter :(
    Wir haben eine Rational Klasse bekommen die ich etwas abgeändert habe aber um diese Klasse soll es hier nicht gehen. Es soll eine zweite Klasse geschrieben werden mit:
    Hier die gegebene Klasse (wie gesagt etwas geändert):
    Code (Java):

    class Rational {
        protected long num, denom;
       
        Rational(long num, long denom) {
            this.num = num;
            this.denom = denom;
        }
       
        Rational sum(Rational b) {
            long res1 = (num * b.denom) + (b.num * denom);
            long res2 = denom * b.denom;
            return new Rational(res1, res2);
        }
       
        long getDenom() {
            return denom;
        }
       
        long getNum() {
            return num;
        }
       
        String text() {
            if (getDenom() == 1)
            return "" + getNum();
            return getNum() + "/" + getDenom();
            }
    }
    und hier mein Versuch der SignedRational Klasse.
    Mein Problem ist das ich nach dem Aufruf von super die Werte nicht mehr ändern kann :(

    Code (Java):

    public class SignedRational extends Rational {
       
        SignedRational(int n, int d){
            super(n,d);
            if(d<0) {
                d=-d;
                n=-n;
            }
           
        }
       
    }
     
    Kann mir da jemand weiter Helfen?

    LG
     
  2. Java online lernen
  3. httpdigest
    httpdigest Bekanntes Mitglied
    Code (Java):
    SignedRational(int n, int d){
      super(n,d);
      if (d < 0) {
        this.denom = -d;
        this.num = -n;
      }
    }
     
  4. ocsme
    ocsme Aktives Mitglied
    Achso stimmt ja ich hab ja zugriff auf die Datenelemente über this! o_O gut das es euch gibt :) man man man!!!
    Irgendwann muss man das ganze doch mal verstehen :( *kopfschüttel!*
    Dank dir =)

    Kann sein das hier noch ein paar mehr Fragen kommen zu der Aufgabe :D
    LG
     
  5. ocsme
    ocsme Aktives Mitglied
    Der Zweite Teil der Aufgabe heißt:
    Die Methode sieht bei mir so aus:
    Code (Java):
    SignedRational normalize() {
            if(getNum()<0)
                num = -getNum();
            return this;
        }
    Was mir nicht gefällt ist der Zugriff auf die Datenelement also hier num = . Kann man das ändern?
    und der dritte Teil lautet:
    Damit konnte ich nichts anfangen denn man kann doch einfach die sum Methode von Rational benutzen:
    Code (Java):
    Rational sum(Rational b) {
            long res1 = (num * b.denom) + (b.num * denom);
            long res2 = denom * b.denom;
            return new Rational(res1,res2);
        }
    Deswegen sieht die SignedRational Klasse wie folgt aus:
    Code (Java):

    public class SignedRational extends Rational {
       
       
         SignedRational(int n, int d){  
            super(n,d);
            if(d<0) {
                denom=-d;
                num=-n;
            }
        }
       
        SignedRational normalize() {
            if(getNum()<0)
                num = -getNum();
            return this;
        }
       
        Rational sum(Rational b) {
            long res1 = (num * b.denom) + (b.num * denom);
            long res2 = denom * b.denom;
            return new Rational(res1,res2);
        }

    }
     
     
  6. ocsme
    ocsme Aktives Mitglied
    Das mit dem Datenelement habe ich grade selbst hin bekommen :)
    Code (Java):
    SignedRational normalize() {
            if(getNum()<0)
                setNum(-getNum());
            return this;
        }
    Denn Setter habe ich in Rational gebaut sieht so aus:
    Code (Java):
        void setNum(long n) {
            num=n;
        }
     
  7. mihe7
    mihe7 Bekanntes Mitglied
    Probier mal
    Code (Java):

    SignedRational r1 = new SignedRational(1,1);
    SignedRational r2 = new SignedRational(-1, 1);
    r1.sum(r2).normalize();
     
     
  8. ocsme
    ocsme Aktives Mitglied
    mhhh... klar dann kommt das normalize() ja nicht definiert ist für Rational. Ist es ja auch nicht :D
    Wie kann ich das ändern? Ich hab mir heute zwar die Vererbung nochmals angeschaut doch das Thema ist sehr umfangreich finde ich und es fällt mir jetzt nicht ein wie ich das ändern könnte.
    Ich wollte es so machen das ich bei sum jeden Rational benutzen kann. Da es ja eh eine Redefinitione werden soll muss man den Methodenkopf nutzen und da steht ja auch Rational. Würde ein Typcast das Problem beseitigen?
    LG
     
  9. ocsme
    ocsme Aktives Mitglied
    System.out.println(r1.sum(r2).normalize().text());
    Ausgabe ist 0

    Wenn ich die Methode aber Überlade nicht redefiniert!
    Code (Java):
    SignedRational sum(Rational b) {
            long res1 = (num * b.denom) + (b.num * denom);
            long res2 = denom * b.denom;
            return new SignedRational(res1,res2);
        }
     
  10. ocsme
    ocsme Aktives Mitglied
    ich werde heute oder morgen das Thema zur Vererbung erneut durcharbeiten dann kann ich meine Frage vielleicht genauer stellen oder vielleicht sogar eine Lösung zeigen!
     
  11. Java online lernen
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Vererbung änderung des Konstruktors - Ähnliche Themen

Vererbung Ueben mit kleiner Datenstruktur von Räumen
Vererbung Ueben mit kleiner Datenstruktur von Räumen im Forum Java Basics - Anfänger-Themen
Umgang mit Vererbung verstehen
Umgang mit Vererbung verstehen im Forum Java Basics - Anfänger-Themen
Vererbung/Interfaces/Generics
Vererbung/Interfaces/Generics im Forum Java Basics - Anfänger-Themen
Vererbung mithilfe von Bluej
Vererbung mithilfe von Bluej im Forum Allgemeine Java-Themen
Vererbung
Vererbung im Forum Java Basics - Anfänger-Themen
Thema: Vererbung änderung des Konstruktors