[Java] Problem mit extends

Manuel_21

Cadet 3rd Year
Registriert
Jan. 2003
Beiträge
40
Hi folgendes Problem,

ich dümpel mich gerade ein wenig durch ein Java-Tutorial und habe mir eine eigene Klasse erstellt... (wuuuhuuu gut gell ;o)).
Eine neue Klasse soll die Eigenschaften der bestehenden Klasse übernehmen.

Also habe ich mittels des Schlüsselworts "extends" die bestehende Klasse eingebunden.
Es klappt auch fast wunderbar mit der Ausnahme, dass ich jetzt folgende Fehlermeldung erhalte:

Code:
Implicit super constructor HelloWorld() is undefined for default constructor. Must define an explicit constructor

HelloWorld ist dabei eine bestehende Klasse.

Die neue Klasse habe ich folgendermassen erstellt:

Code:
class Auto extends HelloWorld {

}

... mehr noch nicht... was ist daran fehlerhaft?
Könnt ihr mir helfen? Wäre super... vielen Dank schon mal im voraus und schönes We!!!

Gruss
Manuel
 
Hat die Klasse HelloWorld denn einen Leerkonstruktor, also HelloWorld() ?
Weil, wenn die Superklasse keinen Default, bzw Leerkonstruktor hat, kann sie nicht extended werden.
 
Hi ...

danke schon mal für die schnelle Hilfe...
ich habe zwei Konstruktoren selber erstellt. Ich dachte einen Default-Konstruktor gibt es immer? Bzw. ok...gibt es dann wenn kein anderer angegeben wird...

aber was hab ich dann jetzt falsch gemacht? Ich habe zwei Konstruktoren selber erstellt...

sieht folgendermassen aus...:

Code:
public class HelloWorld 
{

    public String 	Autoname;
    public int 		Erstzulassung;
    public int 		Leistung;
    
    public HelloWorld(String Name){
        this.Autoname = Name;
    }
    
    public HelloWorld(String Name, int Erstzulassung, int Leistung)
    {
        this.Autoname = Name;
        this.Erstzulassung = Erstzulassung;
        this.Leistung = Leistung;
    }
    
    public void AutoAlter(int anzahl)
    {
        while (anzahl-- > 0)
        {
            System.out.println("Autoalter: " + (2005 - Erstzulassung) + " Jahre");
        }    
    }
    
	public static void main(String[] args)  
	{
	    HelloWorld einAuto = new HelloWorld("Opel Corsa", 1800, 120);
	    System.out.println("Autotyp: " + einAuto.Autoname);
	    System.out.println("Erstzulassung: " + einAuto.Erstzulassung);
	    System.out.println("Leistung: " + einAuto.Leistung);	   
	}
}

kein sinnhafter code...wollte einfach nur bisi üben...aber wo ist da jetzt mein denkfehler..danke schon mal
 
Du brauchst einen Konstruktor, der keine Parameter annimmt, einen Leerkonstruktor also:
public HelloWorld(){
this(null);
}
oder
public HelloWorld(){
this.Autoname = null;
}
 
wieso brauche ich das? sorry, wenn ich so doof nachfrage...aber ich find hier grade mal keine erklärung...

wenn ich keinen bestimmten konstruktor angegeben hätte würde es funktionieren oder wie? weil er dann den default verwendet?
 
Klappt es denn so?
Ich weiss auch nicht genau, aber ich hatte das Problem auch schon und damit gelöst bekommen.
Wenn du von einer Klasse erbst, muss diese einen Leerkonstruktor haben, damit in der Unterklasse dein Konstruktor den der Superklasse "überschreiben" kann.
Sonst weiss der Compiler nicht, welchen anderen Konstruktor mit welchen Werten er nehmen soll.
 
1. Kein default-Konstruktor in beiden Klassen definiert und die Oberklasse hat auch sonst keine Konstruktoren-> ok, Java erzeugt Default-Konstruktoren.
2. Sobald aber die Oberklasse einen nicht-Default-Konstruktor erhält und keinen Default-Konstruktor explizit hingeschrieben bekommt, dann erhältst Du besagte Fehlermeldung.

Beispiele:

ok:
Code:
public class HelloWorld {}

public class Auto extends HelloWorld {}

auch ok:
Code:
public class HelloWorld {
public HelloWorld() {}	
}

public class Auto extends HelloWorld {}

ebenfalls ok:
Code:
public class HelloWorld {
public HelloWorld() {}	
}

public class Auto extends HelloWorld {
public Auto(){}
}

falsch:
Code:
public class HelloWorld {
public HelloWorld(String s() {}	
}

public class Auto extends HelloWorld {
}


auch falsch:
Code:
public class HelloWorld {
public HelloWorldString s() {}	
}

public class Auto extends HelloWorld {
public Auto(){}
}

so geht es wieder:
Code:
public class HelloWorld {
public HelloWorld(){}
public HelloWorldString s() {}	
}

public class Auto extends HelloWorld {
public Auto(){}
}

bzw. so:
Code:
public class HelloWorld {
public HelloWorld(){}
public HelloWorldString s() {}	
}

public class Auto extends HelloWorld {

}
 
Genau so meinte ich das ;-)
War bloss zu faul, das alles so wunderbar aufzuschreiben.
 
Richtig, Du hast eigentlich mit Deinem ersten Posting schon alles erklärt. :daumen:
Aber oft sieht man den Wald vor lauter Bäumen nicht, deswegen bin ich mal konkret™ geworden.
 
Zurück
Oben