/** Diese Klasse symbolisiert eine beliebige Waehrung */
public abstract class Waehrung {

  /** Gibt den Wert des Objekts in US-Dollar zurueck */
  public abstract double dollarBetrag();

  /** Gibt den Wert der Waehrung in Dollar als String zurueck */
  public String toString() {
    return "$"+dollarBetrag();
  }

  /** Vergleicht zwei Objekte auf Gleichheit */
  public boolean equals(Object obj) {
    // Vergleiche zwei Waehrungs-Objekte
    // bzgl. des Dollar-Betrages
    if (obj instanceof Waehrung)
      return this.dollarBetrag()==
             ((Waehrung)obj).dollarBetrag();
    // Ist obj keine Waehrung, dann verwende
    // die equals-Methode der Superklasse Object
    else
      return super.equals(obj);
  }

  /** Liefert den Hashcode eines Objekts */
  public int hashCode() {
    return (int)(dollarBetrag()*100);
  }

}
