Vererbung Methodenvererbung mit finalen Variablen

Diskutiere Methodenvererbung mit finalen Variablen im Java Basics - Anfänger-Themen Bereich.
Arif

Arif

Hallo erstmal. Ich programmiere seit 5 Jahren in Java, deswegen ist diese Frage mir etwas peinlich.
Wenn eine Superklasse eine Methode mit einer finalen Parameter deklariert, dann müssen die Unterklassen den Parameter nicht als final deklarieren, denn bei der Vererbung sind die Methoden der Vertrag bzw. der Rückgabetyp muss kompatibel und die Argumentliste gleich sein. Der final-Modifizierer beschränkt sich nur auf die Superklassen-Methode.

Also wäre dies hier gültig:

Java:
public class A {
    
    public void a(final int i) {
        
    }
}

public class B extends A {
    
    public void a(int i) {
        i = 4;
    }
}
Umgekehrt funktioniert es genauso

Java:
public class A {
    
    public void a(int i) {
        
    }
}

public class B extends A {
    
    public void a(final int i) {
        
    }
}
Die beiden Beispiele sind also legitime Vererbungsbeispiele, oder habe ich einen Denkfehler? Ich habe die Beispiele erfolgreich kompilieren und ausführen können.
 
mihe7

mihe7

Richtig.
https://docs.oracle.com/javase/specs/jls/se14/html/jls-8.html#jls-8.4.2 hat gesagt.:
Two methods or constructors, M and N, have the same signature if they have the same name, [...] the same formal parameter types.
Davon abgesehen kann man sich das auch über das Schlüsselwort final einfach herleiten. Da in Java Parameter sowieso immer als Kopie übergeben werden, ist es für den Aufrufer völlig irrelevant, ob der Parameter final deklariert wurde oder nicht. Folglich dient das Schlüsselwort nur als Einschränkung der Implementierung der betreffenden Methode.
 
Thema: 

Methodenvererbung mit finalen Variablen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben