Compiler-Fehler undefinierter Konstruktor

starsailor17

Mitglied
Hallo zusammen,

ich bin ein ziemlicher JAVA-Neuling und habe Probleme mit einem Konstruktoraufruf aus einer Unterklasse. Die Aufgabe besteht darin, einen Währungsumrechner zu schreiben (Eingabe z.b. in DM, umrechnen via EUR in andere Währungen). Einige Klassen, Methoden und Konstruktoren sind aus der Aufgabenstellung vorgegeben und müssen genau so eingebaut werden.

Klasse Währung:
Java:
abstract class Waehrung {

	double wert;	
	static double kursdm = 1.95583;
	static double kurslire = 1936.27;
	static double kursfranc = 6.55957;
	static double kurseuro = 1;
	public abstract double euroBetrag();
	
	}

Klasse Euro: (ist aus der Aufgabenstellung vorgegeben und darf nicht angepasst werden)

Java:
public class Euro extends Waehrung {
		private double wert;  
		public Euro(double wert) {
			this.wert = wert;
		}
	
	public double euroBetrag() {
		return wert;
	}
}

Klasse DM: (der Konstruktor ist vorgegeben, Kursumrechnung muss nicht zwingend hier sein)
Java:
public class DM extends Euro {    
	public DM ( Euro euro) {  		
		super(euro.euroBetrag()/kursdm);  
  }
}

Main Methode:
Java:
public class währungskalkulator {
	public static void main(String[] args) {		
		System.out.println ("Bitte einen DM-Betrag eingeben:");
		double dmBetrag =  einlesen(); 							
		Euro euro =  new DM(dmBetrag );

Hier ( new DM(dmBetrag )) meldet der Compiler dann "The constructor DM(double) is undefined".

Kann mir jemand sagen wo genau der Fehler liegt?

Danke!
 
Wie dir die Fehlermeldung schon sagt, hast du kein Konstruktor für DM, der einen double- Wert annimmt. Du hast nur für Euros einen der double nimmt😉

oder wolltest du das so machen ?
Java:
Euro eu = new Euro(2.2);
DM dm = new DM(eu);
 
Zuletzt bearbeitet:
ja genau so passts, vielen Dank!

Ich hätte da noch eine weitere Frage..

Die Variable "wert" ist ja nun für jedes Objekt "private" und eigentlich nur über ein getter zugänglich. Um in der Main Methode den Wert eines Objekts für Berechnungen nutzen zu können müsse man die Methode euroBetrag() aus der Klasse Euro benutzen. Der Compiler motzt dass die Methode static sein müsse. Die Methode darf aber sicherlich nicht static sein, sonst wird der Konstruktoraufruf dann nicht funktionieren. Gibts da eine Möglichkeit?
 
ja das habe ich auch so eingebaut:

Java:
public double waehrungsBetrag(double faktor) {			
		double betrag = Euro.euroBetrag();		
		betrag = betrag * faktor;
		return betrag;

der Faktor entspricht dem jeweiligen Wechselkurs aus der Klasse Waehrung der beim Aufruf mitgegeben wird.
 
ja das habe ich auch so eingebaut:

Java:
public double waehrungsBetrag(double faktor) {			
		double betrag = Euro.euroBetrag();		
		betrag = betrag * faktor;
		return betrag;

der Faktor entspricht dem jeweiligen Wechselkurs aus der Klasse Waehrung der beim Aufruf mitgegeben wird.

Wo genau ist die Methode "waehrungsBetrag drin? ... Du rufst ja atm Euro.euroBetrag() auf. Das ist ein Static- Auftruf. Du musst schon auf dem Objekt das Aufrufen. Wenn die Methode in der Euro- Klasse ist willst du dort wahrscheinlich ein "this" haben. Also this.euroBetrag().
 
sorry ich war unpräzise.

ich will ja nur aus der Euro-Klasse die Methode aufrufen.
Wenn ich das mit einem get (und static) mache dann gehts, nur darf man das gem. Aufgabe nicht.

Euro-Klasse:
Java:
public class Euro extends Waehrung {
		private double wert;
		public Euro(double wert) {
			this.wert = wert;
		}
	
	public double euroBetrag() {
		return wert;
	}
}

weisst du was ich meine?
 
also wenn ich das richtig verstehe willst du in der Methode "waehrungsBetrag" die Methode euroBetrag aufrufen. Wie oben schon gefragt, in welcher Klasse ist denn die Methode "waehrungsBetrag" ?
 
Zuletzt bearbeitet:
ja genau.

Die Methode "waehrungsBetrag" ist in der "Ausführklasse", dort wo auch die MainMethode ist. Das war der Vorschlag des Tutors dies so zu strukturieren...?!
 
okay... dann sollte die Methode ja auch nen Euro übergeben bekommen, wie Truckle schon gesagt hast. Ansonsten wird es schwierig und sinnlos auf die Methode zuzugreifen.

Java:
public double waehrungsBetrag(double faktor,Euro euro) {          
        double betrag = euro.euroBetrag();      
        betrag = betrag * faktor;
        return betrag;

und wahrscheinlich sollte die Methode waehrungsBetrag dann auch static sein oder greifst du da mit einem Objekt der Klasse "währungskalkulator" drauf zu ?
 
hey vielen Dank euch beiden, hat super geklappt so.
Eigentlich ganz logisch wenn man es sich nun anschaut, aber ich glaub da waren zuviele Bäume um den Wald zu sehen..

Besten Dank!!
 

Zurück
Oben