Methoden Beliebig viele Objekt-Eingabeparameter im Konstruktor

JBJ

Mitglied
Hallo!

Ich sitze hier grade vor einem kleinen Problem. Ich habe eine Klasse "Oberklasse" erstellt:

Java:
public class Oberklasse {
    int att;
    
    public Oberklasse(int att){
        this.att=att;
    }
}

Diese Klasse hat ein Attribut zugewiesen und einen einfachen Konstruktor.

Ich möchte nun in der Klasse "Unterklasse" einen Konstruktor erstellen, der es mir erlaubt, beliebig viele Objekte der Klasse "Oberklasse" als Eingabeparameter zu verwenden. Die Werte der jeweiligen att sollen addiert werden und ein neues Objekt mit diesen Eigenschaften erzeugt werden. Hier mein bisheriger Versuch:

Java:
public class Unterklasse extends Oberklasse{
    
    public Unterklasse(Oberklasse ...Werte){

        int sum=0;
        for(Oberklasse x: Werte){
            sum=sum+x.att;
        }
        super.att=sum;
    
    }
}

Leider kommt die Fehlermeldung, dass der Konstruktor nicht auf dieses Datentyp angewendet werden kann. Gesucht: int, Gefunden: keiner.

Über schnelle Hilfe wäre ich sehr dankbar 🙂
 
Du musst den Konstruktor deiner Oberklasse in dem Konstruktor deiner Unterklasse aufrufen. Denn deine Unterklasse ist auch nur eine Oberklasse.
 
Danke für die schnelle Antwort!

Leider bin ich noch nicht 100% erleuchtet. Beziehst du dich auf den super() Befehl?

Denn da treten meines Wissens nach 2 neue Probleme auf. Entweder der super(sum) Befehl steht ganz oben im Konstruktor und die Variable sum ist dort noch garnicht existent.

Java:
public class Unterklasse extends Oberklasse{
    
    public Unterklasse(Oberklasse ...Werte){
        
        super(sum);
        int sum=0;
        for(Oberklasse x: Werte){
            sum=sum+x.att;
        }
    
    }
}

Oder der super(sum) Befehl steht nach der Operation. Das ist allerdings nicht erlaubt, weil der super() Befehl immer ganz oben im Konstruktor stehen muss.

Java:
public class Unterklasse extends Oberklasse {

    public Unterklasse(Oberklasse... Werte) {

        int sum = 0;
        for (Oberklasse x : Werte) {
            sum = sum + x.att;
        }
        super(sum);

    }
}

Kannst du das vielleicht noch ein wenig genauer erläutern? Danke!
 
Ja, ich beziehe mich auf super().

Wenn du keinen super-Befehl expliziet hinschreibst, ruft Java immer gleich super(); auf - deshalb kommt es bei dir zu einem Fehler.

Du musst entweder eine dritte Funktion einbauen, die dein Konstruktor dann aufruft, z.B:
Java:
public Unterklasse(Oberklasse ...Werte){
        
        super(getAttSum(Werte));
    
    }

Oder du machst eine statische Funktion, die dann anstelle des Konstruktors das Objekt zurückgibt:
Java:
public static Unterklasse merge(Oberklasse... Werte) {
  int sum=0;
        for(Oberklasse x: Werte){
            sum=sum+x.att;
        }
  return new Unterklasse(sum);
}
public Unterklasse(attSum){
        
        super(attSum);
    
    }

Lg Zettelkasten
 
Danke für die ausführliche Antwort.

Bisher sieht meine Unterklasse nun so aus:

Java:
public class Unterklasse extends Oberklasse {
    
    public Unterklasse(Oberklasse ...Werte){
        
        super(getAttSum(Werte));
        
    }
    
    public int getAttSum(Oberklasse ...Werte){
        int sum= 0;
        for(Oberklasse x: Werte){
            sum=sum+x.att;
        }
        return sum;
    }
}

Nun erscheint die Fehlermeldung:

cannot reference this before supertype constructor has been called.
 
Du hast ein
Code:
static
vergessen:
Java:
public int getAttSum(Oberklasse ...Werte){
 

Neue Themen


Zurück
Oben