Überladen / Überschreiben / Signatur

Dr Franke Ghostwriter
gehört der Ergebnistyp einer Methode zu der Signatur?

ich habe eine Methode
public int test (int wert1)

Wenn ich diese nun in einer abgeleiteten Klasse so definiere
public void test (int wert1)

Ist diese dann überschrieben oder überladen?

Wenn der Ergebnistyp nicht zur Signatur gehört, dann wär sie ja überschrieben
 
Der Ergebinstyp gehört nicht zur Signatur. In deinem Bsp. ist die Methode überschrieben. Wenn du schreiben würdest:

public void test (int wert1, int wert2)

wäre sie überladen und zur Laufzeit wird anhand der übergebenen Werte entschieden ob die eine oder die andere besser passt.
Schöne Grüße.
 
In deinem Beispiel beschwert sich der Compiler.
Code:
public class A {
    public int test(int wert){
        return 1;
    }
    protected A b(){
        return this;
    }
}
 
public class B extends A{
//die folgende Methode hat die selbe Signatur wie ein Methode der Oberklasse, versucht sie also zu [B]überschreiben[/B].
Das muss der Compiler quasi tun, da er nur die Signatur zur Verfügung hat um Methoden auseinander zu halten!
Überschreiben geht jedoch nicht, da sich für ein Überschreiben auch der Rückgabewert vertragen [B]muss[/B] und der Zugriffsmodifikator [B]darf nicht reduzierend [/B]sein. Du darfst also nicht aus einem protected ein private machen
//    public void test(int wert) {
//        // TODO Auto-generated method stub
//    }
 
//folgendes funktioniert weil B ein A ist und überschreibt die Methode b aus A
//auch die Zugriffskontrolle funzt ;) weil schwächer und nicht stärker einschränkend als in erbender Klasse
    public B b(){
        return this;
    }
}

Grüße
Henrik
 
Oben