Vererbung Konstruktoraufruf

maxt123

Neues Mitglied
Hallo!

Ich hoffe Ihr könnt mir weiterhelfen, bin blutiger Java-Anfänger...


Also, ich habe eine TestKlasse erstellt, in welcher ich ein Objekt der Klasse RandomBot erzeuge.

Java:
RandomBot robi1 = new RandomBot(raum);


Nun will ich, dass in meinem super-Konstruktoraufruf für b und c zwei zufällige Werte zwischen 1 und 10 stehen


Java:
public class RandomBot extends RobotSE
{
    public RandomBot(City stadt)
    {
 
        Random zufall = new Random();
        int b = zufall.nextInt(10)+1;
        int c = zufall.nextInt(10)+1;
       
        super(stadt,b,c,Direction.NORTH);

    }

Müsste das so theoretisch nicht funktionieren? Oder muss in einem Konstruktor bei Klassenvererbung immer als Erstes der super-Aufruf stehen?

Als Fehlermeldung bekomme ich, dass die Parameterliste im super-Aufruf nicht mehr mit der Parameterliste meiner ursprünglichen Klasse übereinstimmt...

Wenn ich das mit den Zufallszahlen weglasse, und einfach für b und c in der TestKlasse zwei Werte übergebe, funktioniert alles normal...

Vielen Dank schonmal für eure Hilfe!
 

stg

Top Contributor
Ja, der Aufruf von super() muss zwingend in der ersten Zeilte stehen.

Du kannst dir eine Factory-Methode schreiben:

Java:
public class RandomBot extends RobotSE { 
    private RandomBot(City stadt, int b, int c, Direction direction) {  
        super(stadt,b,c,direction);
    }
    public static RandomBot createInstance(City stadt) {    
        Random zufall = new Random();
        int b = zufall.nextInt(10)+1;
        int c = zufall.nextInt(10)+1;
        return new RandomBot(stadt, b, c, Direction.NORTH);
    }
}

Statt
Java:
RandomBot robi1 = new RandomBot(raum);
erstellst du deine Objekte dann über die Factory-Methode:
Java:
RandomBot robi1 = RandomBot.createInstance(raum);
 

Thallius

Top Contributor
Warum willst du den super Konstruktor überhaupt aufrufen? Das macht doch gar keine Sinn. RandomBot enthält ja schon alle Variablen die du mit deinem super Aufruf setzen willst. Du kannst also einfach die Werte direkt setzen.

Gruß

Claus
 

Joose

Top Contributor
RandomBot enthält ja schon alle Variablen die du mit deinem super Aufruf setzen willst. Du kannst also einfach die Werte direkt setzen.

Funktioniert nur solange man Zugriff auf diese Werte hat. Außerdem kann es vorkommen das im super-Konstruktor noch Überprüfungen stattfinden oder andere Werte in Abhängigkeit von Parametern gesetzt werden.
 

tommysenf

Top Contributor
Ja, der Aufruf von super() muss zwingend in der ersten Zeilte stehen.

Du kannst dir eine Factory-Methode schreiben:

Alternativ ginge auch noch folgendes:

Java:
public class RandomBot extends RobotSE { 
    public RandomBot(City stadt) { 
        super(stadt, new Random().nextInt(10)+1, new Random().nextInt(10)+1, Direction.NORTH);
    }
}
 

Ähnliche Java Themen

Neue Themen


Oben