OOP, Konstruktor

I

Ich

Gast
Hey! Ich bin im ersten Semester der OOP und habe eine Frage,die sich auf die Verwendung von Konstruktoren bezieht.
Ich habe eine Klasse Auto und eine Main.
Nachdem ich das Aufgabenblatt soweit abgearbeitet habe und versch. Objekte (auto) erstellt habe, soll ich fuer die Klasse Auto weitere Attribute anlegen. Marke, Modell und ob es jeweils eine Klimaanlage hat. Jetzt habe ich mir in der Klasse Auto einen Konstruktor ueberlegt, der fuer alle Attribute bei der Objekterzeugung Werte entgegennimmt. Das habe ich auch getan, nur jetzt zeigt er mir in meiner Main bei Auto auto2 = new Auto (); "the constructor Auto() is undefined" an. Das war, bevor ich meinen Konstruktor geschrieben habe, der alle Attribute entgegennimmt allerdings noch nicht so. Woran liegt das und wie kann ich es aendern? Danke fuer eure Tipps!


Java:
public class Main {

	public static void main(String[] args) {

		Auto a1 = new Auto (); //neues Objekt erzeugt
		a1.Baujahr = 1963;
		
		Auto a2 = new Auto (); //neues Objekt erzeugt
		a2.Baujahr = 2010;
		
		a2=a1;
		//auto1 wird das Baujahr von auto2 zugewiesen
		
		System.out.println("Das Baujahr von dem ersten Auto lautet: " + a1.Baujahr);
		System.out.println();
		System.out.println("Das Baujahr von dem zweiten Auto lautet: " + a2.Baujahr);
		System.out.println();
		// auto1=1963, auto2=1963

		//a) + c)
		Auto auto1 = new Auto ();
		auto1.gibBaujahr = 2010;
		
		Auto auto2 = new Auto ();
		auto2.gibBaujahr = 2011;
		
		System.out.println("Ausgabe der Methode gibBaujahr:" + " " + auto1.gibBaujahr + " " + "und" + " " + auto2.gibBaujahr);
		System.out.println();
		
		auto1 = null;
		// null ist eine leere Referenz, die auf nichts zeigt
		
		//Ausgabe der statischen Methode
		System.out.println("Statische Methode,Referenzuebergabe:" + " " + Auto.getgibBaujahrVonAuto());
	
		Auto auto3 = new Auto();
		auto3.Baujahr = 2015;
		auto3.Marke = "Ford";
		auto3.Modell = "Focus";
		auto3.Klimaanlage = false;	
	}
}
public class Auto {

	public Integer Baujahr;	
	
	//c)
	public Integer gibBaujahr;
	
	public static int gibBaujahrVonAuto = 2055; 
	
	public static int getgibBaujahrVonAuto () {
	return gibBaujahrVonAuto;
	}
	
	public String Marke;
	
	public String Modell;
	
	public boolean Klimaanlage;
	
	public Auto ( int bauj, int gibBJ, String automarke, String automodell, boolean klimaanl) {
	
		Baujahr = bauj;
		gibBaujahr = gibBJ;
		Marke = automarke;
		Modell = automodell;
		Klimaanlage = klimaanl;
	}
}
 

Swoop

Gesperrter Benutzer
Der Konstruktor hat doch einige Parameter ? Diese solltest du beim Erzeugen des Konstruktors auch mitübergeben.

Also es sollte irgendwie so aussehen
Java:
 Auto a2 = new Auto ( 2001, 23, "Audi", "A8 3.0", true);
 

Suinos

Bekanntes Mitglied
Als Erklärung:

Solange eine Klasse keine Konstruktoren definiert, wird automatisch ein Standard-Konstruktor (no-arg constructor) eingefügt, welcher keine Parameter hat und nur den oberen Konstruktor aufruft, also quasi so:
Java:
public Auto()
{
	super();
}

Wenn du vorher also
Code:
new Auto()
aufgerufen hast, hast du diesen unsichtbaren Konstruktor verwendet.

Da du jetzt aber einen eigenen Konstruktor geschrieben hast, wird der Standard-Konstruktor nicht mehr erzeugt und der Compiler kann den Konstruktor
Code:
Auto()
nicht mehr finden -> Fehlermeldung.
 
I

Ich

Gast
Danke fuer deinen Tipp. Aber auch so aendert das nichts an meinem Fehler.
Vielleicht hier mal meine Frage mit weniger Quellcode.

In der main wollte ich die Richtigkeit des Konstruktors aus der Klasse Auto mit der Erzeugung eines neuen Autos demonstrieren und dem Konstruktor hierbei sinnvolle Werte uebergeben.

Main :
Java:
Auto auto3 = new Auto ();
		auto3.Baujahr = 2015;
		auto3.Marke = "Ford";
		auto3.Modell = "Focus";
		auto3.Klimaanlage = false;
Konstruktor in der Klasse Auto:

public Auto ( int bauj, int gibBJ, String automarke, String automodell, boolean klimaanl) {

Java:
Baujahr = bauj;
		gibBaujahr = gibBJ;
		Marke = automarke;
		Modell = automodell;
		Klimaanlage = klimaanl;

Nun kommt eben in der Main der Fehler, dass der Konstruktor Auto() undefined ist. Reichen nicht diese Zeilen als Uebergabe?
Java:
auto3.Baujahr = 2015;
		auto3.Marke = "Ford";
		auto3.Modell = "Focus";
		auto3.Klimaanlage = false;
 

Ich

Mitglied
Ich weiss nicht, wie das geht...
In der Klasse AUTO ist doch mein Konstruktor um den es geht.
Java:
public Auto (int bauj, int gibBJ, String automarke, String automodell, boolean klimaanl)
Aber der stimmt doch eigtl so. Oder etwa nicht?
Muss ich nicht in der Main etwas an den Standardkonstruktoren aendern?
Denn da scheint er ja -->Dank an Suionos<< die Stand.konstr.nicht mehr zu finden und gibt die Fehlermeldung an.

Es tut mir Leid, wenn ihr bei mir mit all euren Hilfen bei 0 anfangen muesst :(
 

Landei

Top Contributor
Java:
public Auto (int bauj, int gibBJ, String automarke, String automodell, boolean klimaanl)

Dann musst du diese Werte auch mitliefern, nicht [c]new Auto();[/c] wie in deinem Beispiel weiter oben, sondern

Java:
Auto auto = new Auto (1984, 4711, "Sachsenring", "Trabant", false);
 

VfL_Freak

Top Contributor
Moin,

In der Klasse AUTO ist doch mein Konstruktor um den es geht.
Java:
public Auto (int bauj, int gibBJ, String automarke, String automodell, boolean klimaanl)
Aber der stimmt doch eigtl so. Oder etwa nicht?

Sicher stimmt der so, aber Du nutzt ihn ja gar nicht :eek:
Du rufst nur "Auto()" auf - und der ist jetzt halt nicht deklariert (genau das hat Dir Suinos schon erklärt)!

Also entweder deklarierst Du "Auto()" zusätzlich in Deiner Klasse "Auto" (dann kannst Du ihn benutzen) oder Du nutzt statt dessen besser gleich den o. g. Konstruktor und übergibst die Werte so wie in der Parameterliste vorgeben! ;)

Gruß
Klaus
 

Landei

Top Contributor
Du hattest einen Audi. Deren Zuverlässigkeit wird total überschätzt...

Nee, ich hatte den Eindruck, dass der TO deinen Beitrag überlesen hatte.
 

Neue Themen


Oben