Können in Java statische Methoden überschrieben werden?

In einer Klasse können Methoden überschrieben werden (Polymorphie). Aber was ist mit statischen Methoden? Man kann auch in einer abgeleiteten Klasse eine Methode mit gleicher Signatur wie in der Basisklasse definieren. Ist das immer noch "überschreiben"? Worin besteht der Unterschied?

Noch keine Stimmen abgegeben
Noch keine Kommentare
  • 3 Jul. 2022

    Das Überschreiben bzw. Polymorphie passieren zur Laufzeit, das Laden der statischen Methoden geschieht jedoch bereist beim Kompilieren. Deswegen können statische Methoden nicht überschrieben werden und man spricht hier von "Ausblenden" bzw. von "Shadowing". Dazu ein kleines Beispiel (bitte beachten, dass hier statische Methoden an Instanzen aufgerufen werden, was nur zur Demonstration dient!):

    public class A {
            public static int test() {
                return 1;
            }
     }
    
     public class B extends A {
            public static int test() {
                return 2;
            }
     }
    

    Wir haben hier zwei einfache Klassen definiert, die Methode "test" wird in der Klasse B "shadowed".

    A a = new A();
    B b = new B();
    System.out.println(a.test()); // 1
    System.out.println(b.test()); // 2
    

    Hier ist das Ergebnis wie erwartet 1 und 2. Was passiert, wenn wir für "a" die Referenz auf "b" setzen?

    a = b;
    System.out.println(a.test()); // 1
    

    Interessanterweise ist das Ergebnis die 1: Die statische Methoden binden an den Typen und nicht die Objekt Instanz. Und beim Kompilieren war es eben "A" und nicht "B".

    Noch keine Stimmen abgegeben
    Noch keine Kommentare