2015-09-01 10 views
6

Uważam, że to dziwne i zastanawiałem się, czy jest to coś, co jest regularnie używane. Kiedy może być użyteczny?Zastępowanie domyślnej metody interfejsu za pomocą metody abstrakcyjnej

public interface InterA { 
    Object getInfo() throws Exception1; 
} 
public interface InterB { 
    public default Integer getInfo(Object s) {return 67;} 
} 

public interface InterC extends InterA, InterB { 
    @Override public abstract Integer getInfo(Object s); 
} 
+1

Można przetestować, czy kompiluje się przy użyciu javac ... –

+1

@LuiggiMendoza Zrobiłem, to kompiluje. Czy jest używany regularnie, kiedy jest przydatny? – Stanko

+0

To pytanie nie powinno być, jeśli jest to dozwolone. Pytasz o przypadki użycia, aby użyć tego projektu. Polecam, aby edytować pytanie, w przeciwnym razie odpowiedź brzmi: ** tak, to jest dozwolone. ** –

Odpowiedz

1

Oczywiście, że możesz to zrobić. Nazwa sama w sobie mówi, że jest to abstract. Możesz to zrobić, gdy zaimplementowana klasa tej abstrakcyjnej klasy musi zastąpić tę metodę.

Kiedy decydujesz się na abstrakt, nie musisz go wdrażać.

+0

Tak więc klasa, która implementuje InterC, powiedzmy InterD, musi podać implementację tej metody? Powiedzmy, że mamy InterE, który implementuje InterD, czy InterE może uczynić metodę abstrakcyjną ponownie? – Stanko

1

Istnieje przed domyślnymi metodami interfejsu. Na przykład, klasa abstrakcyjna może

@Override 
    abstract public int hashCode(); 

zmuszając podklasy zapewnić implementacje dla hashCode, prawdopodobnie z powodu dodatkowych wymagań nałożonych przez klasy abstrakcyjnej.

Powiązane problemy