2015-01-19 23 views
10
public interface Table<T> { 

    @Overrride 
    default boolean equals(Object other) { 
     //do something and return true/false 
    } 
} 

Dlaczego powyższy kod ma błąd kompilacji "java: domyślna metoda równa się w interfejsie Tabela zastępuje członka java.lang.Object"? Czy nie możemy przesłonić metody hashCode i equals przy użyciu domyślnej metody interfejsu, przypuszczalnie mam metody w tym samym interfejsie, aby określić równość obiektu implementującego ten interfejs?Korekta interfejsu domyślnego języka Java 8 Metoda równa się metoda

Odpowiedz

10

Nie. Klasy z implementacjami zawsze zyskują na domyślnych metodach, więc domyślne hashCode lub equals nigdy nie mogą zostać wywołane i dlatego jest zabronione.

+3

Nie tylko * implementacje * wygrywają nad metodami domyślnymi. * Każda deklaracja * dokonana w klasie innej niż "interface" (tj. W hierarchii nadklasy) wygrywa, nawet jeśli zostanie zadeklarowana jako "abstract". – Holger