Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf?

neerual

Mitglied
Hallöchen, ich habe momentan eine Aufgabe mit Interface zu bewältigen und soweit ist alles so gut. Ich habe eine Hauptklasse (Currency) in der ein Interface ist (entschuldigt meine wahrscheinlich nicht ganz richtige Ausdrucksweise des ganzen, ich hoffe ihr wisst trotzdem was ich meine), diese erstellt eine Währung und formatiert sie, also wenn cent größer hundert ist, dann wird ein euro dazu gerechnet. Nur sind das hier noch units (€) und fractions (cent). Dann habe ich mehrere Währungs-Klassen, für zB. Euro und einigen Währungen die etwas anders formatiert werden (5 cent = 1€, zB).

Ich habe jetzt auch eine Test Unit, in der ich ein Currency Objekt (betrag1) erstelle, dieses bekommt zwei integer übergeben und soll dann €.cent ausgeben. Funktioniert auch alles prima!


Nun weiß ich aber nicht, wie ich dem Programm sage, dass dieses Currency Object in Euro geworfen werden soll.. ich dachte an sowas wie betrag1.Euro, aber so richtig sicher bin ich mir da nicht und der compiler hat mir da auch einen Fehler rausgeworfen.

Euro extends Currency, falls das noch zur Frage stand.
Ich hoffe ihr könnt mir weiter helfen 🙂

Code fragmente lade ich natürlich gerne hoch, falls ihr sie braucht 🙂
 
Test Unit (so far):
Java:
public class Test {
  public static void main(String[] args) {
    Currency betrag1 = new Currency (5, 109);
    betrag1.getUnits();
    betrag1.getFractions();
    betrag1.normalize();
    System.out.println(betrag1);
  }
}

Currency:
Java:
public class Currency implements Separable {
    //----------------------private variablen----------------------------------
    private int unit;
    private int frac;
    private char seperator;
    //----------------------Konstruktoren---------------------------------------
    public Currency () {          //Konstruktor1, default-Konstruktor, der ein Object erzeugt, dass einen Unit repaesentiert
      unit = 1;
      seperator = '.';
    }
    public Currency (int u, int f) {    //Konstruktor2, bekommt units und fractions
      unit = u;
      frac = f;
      seperator = '.';
      normalize();                //normalize
    }
    public Currency (int u, int f, char s) {    //Konstruktor3, bekommt units, fractions und seperator
      unit = u;
      frac = f;
      seperator = s;
      normalize();                //normalize
    }
    public Currency (Currency c) {        //Konstruktor4, soll ein Currency Object übergeben bekommen und dieses Kopieren
      this.unit = c.unit;
      this.frac = c.frac;
      this.seperator = c.seperator;
      c.normalize();
    }

    //----------------------methoden-------------------------------------------
    public int getUnits() {
      return unit;
    }
    public int getFractions() {
      return frac;
    }
    public void setSeperator(char seperator) {
      this.seperator = seperator;
    }
    public void normalize() {
      if (frac < 0) {               //frac positivieren
        frac = frac * (-1);
      }
      if(frac >= 100) {             //100 fracs zu einer unit
        unit += frac / 100;
        frac %= 100;
      }
    }
    //---------------------StringRepraesentation-------------------------------
    public String toString() {
      String Ergebnis = "";
      Ergebnis += unit;
      Ergebnis += seperator;
      if (frac < 10) {
        Ergebnis += "0" + frac;
      }
      else {
        Ergebnis += frac + " Einheiten.";
      }
      return Ergebnis;
    }
}

und hier ist zum beispiel Euro:

Java:
public class Euro extends Currency {
  //-------------------private variables---------------------------------------
  private int euro;
  private int cent;
  private char seperator;
  //--------------------konstruktoren------------------------------------------
  public Euro () {              //default-Konstruktor
    int euro = 0;
    int cent = 0;
  }
  public Euro (int e, int c, char s) {  //neuer Konstruktor
    euro = e;
    cent = c;
    seperator = s;
    normalize();
  }
  //------------------getter---------------------------------------------------
  public int getEuro(int e) {
    return euro;
  }
  public int getCent (int c) {
    return cent;
  }
  //------------------setter---------------------------------------------------
  //?????????????????????????????????????
  //-------------------------normalize-----------------------------------------
  public void normalize() {
    if (cent < 0) {               //cent positivieren
      cent = cent * (-1);
    }
    if(cent >= 100) {             //100 cent zu einem euro
      euro += cent / 100;
      cent %= 100;
    }
  }
  //------------------StringRepräsentation ueberschreiben----------------------
  public String toString() {
    String Ergebnis = "";
    Ergebnis += euro;
    Ergebnis += seperator;
    if (cent < 10) {
      Ergebnis += "0" + cent;
    }
    else {
      Ergebnis += cent + "EUR";
    }
    return Ergebnis;
  }
}
 
Puh...also wenn du ein deinem Test Euro brauchst, solltest du auch Euro instanziiern (new Euro(5,109). Ein Currency-Object kannst du nicht zu einem Euro machen.

Vermutlich ist die Euro-Klasse auch nocht nicht richtig.
Aktuell hat ein Euro:
* unit
* fraction
* euro
* cent
* seperator
* seperator

Alle drei Felder kommen also doppelt vor (zumindest wenn man deren Sinn und nicht deren Namen betrachtet).

Vermutlich solle Euro keinen eigenen Felder haben, sondern die von Currency nutzen. Currency könnte auch besser eine abstrakte Klasse sein, je nachdem was die Aufgabenstellung sagt.
 
Alle drei Felder kommen also doppelt vor (zumindest wenn man deren Sinn und nicht deren Namen betrachtet).

Vermutlich solle Euro keinen eigenen Felder haben, sondern die von Currency nutzen. Currency könnte auch besser eine abstrakte Klasse sein, je nachdem was die Aufgabenstellung sagt.

Achso, die Aufgabenstellung sagte unter anderem, dass in der Klasse Euro die Methoden GetEuro und getCent implementiert werden sollten, deshalb bin ich davon ausgegangen, dass int euro und int cent deklariert werden müssten..

heißt das, dass ich eigentlich gar keine neuen Integer erstellen müsste? stattdessen einfach fractions und units weiter verwende? Aber wäre es dann nicht ein Problem, dass unit und frac private in Currency sind?
In der Aufgabenstellung steht auch, dass alle Klassen- und Objektvariablen von Currency private sein müssen.
 
heißt das, dass ich eigentlich gar keine neuen Integer erstellen müsste? stattdessen einfach fractions und units weiter verwende?
Ja.
Aber wäre es dann nicht ein Problem, dass unit und frac private in Currency sind?
In der Aufgabenstellung steht auch, dass alle Klassen- und Objektvariablen von Currency private sein müssen.
Für die Werte gibts jeweils passende Getter, die du nutzen kannst.
 
Nein, in dem Konstruktor musst du nichts zuweisen, da kannst du an den Konstruktor von Currency "weiterleiten":

Etwa:
Java:
public Euro () { 
    super(0,0); //super ruft den Konstruktor der Oberklasse auf
}
[/icode]
 
Nein, in dem Konstruktor musst du nichts zuweisen, da kannst du an den Konstruktor von Currency "weiterleiten":

Etwa:
Java:
public Euro () {
    super(0,0); //super ruft den Konstruktor der Oberklasse auf
}
[/icode]
Okay, danke, aber jetzt habe ich meine ganzen euro's und cent's zu unit's und frac's geändert und jetzt sagt der compiler immer:

  • entsprechende line:
    error: unit has private access in Currency
    return unit;
    ^
 

Zurück
Oben