Wpis z mikrobloga

@koziolek666: Dla mnie mieszanie implementacji do interface'u to jakiś absurd.

Interface ma stanowić kontrakt jak będzie wyglądała komunikacja między obiektami. To, jak ona zostanie zaimplementowana, już klienta interface'u nie interesuje.

Teraz z kolei pisząc pod interface, sugerujemy się implementacją – niby default oznacza, że wcale nie musi ona użyta, ale jednak.

Od tego są klasy abstrakcyjne. Międzymordzie ustanawia komunikację, klasy abstrakcyjne zapodają implementację. Jeśli twórca interfejsu chce dostarczyć przykładową implementację, może
@MacDada: tu pokazałem to jako ciekawostkę, która czasami się przydaje, ale generalnie będzie źródłem różnych ciekawych problemów.

Implementacja w ramach interfejsu, to rozwiązanie bardzo podobne do traitów, choć nie tożsame. Na JVM masz traity w Scali.

Jednak w Javie metody domyślne w interfejsach są z innego powodu. Chodziło o zachowanie kompatybilności wstecznej, gdy dodawano nowe metody do interfejsów. Chociażby obsługę Streamów w kolekcjach. Jeżeli by tego nie zrobiono, to kod