Uczę się z książki o interfejsach i napisali tam, że w interfejsach wszystkie metody muszą być abstrakcyjne. Przechodzę do jakiegoś tutoriala i czytam i widzę, że autor pomija modyfikator abstract w metodach interfejsu. Z czystej ciekawości pytam, od jakiego "patcha" w javie już nie trzeba dodawać modyfikatora abstract do metod?
Trochę inaczej. Jeżeli masz do czynienia z interfejsem to wszystkie metody są w nim publiczne i abstrakcyjne. Skoro tak to kompilator potrafi samodzielnie na podstawie słówka interface
odpowiednio zinterpretować kod i dodać sobie odpowiednie informacje.
Od javy 1.8 metody w interfejsach oznaczone jako default
mają normalne ciało z implementacją.
Z czystej ciekawości pytam, od jakiego "patcha" w javie już nie trzeba dodawać modyfikatora abstract do metod?
Z własnej czystej ciekawości dokopałem się do pierwszego wydania Java Language Specification (jak była wydawana to jeszcze nawet chodzić i mówić nie umiałem się nie urodziłem :D).
Every method declaration in the body of an interface is implicitly abstract, so its body is always represented by a semicolon, not a block. For compatibility with older versions of Java, it is permitted but discouraged, as a matter of style, to redundantly specify the abstract modifier for methods declared in interfaces.
Czyli ten sam tekst co 19 lat później. Ten nacisk Javy na wsteczną kompatybilność :D Z drugiej strony oznacza to, że w jakichś prehistorycznych czasach trzeba było używać abstract
.
zamiana znacznika <code> na <quote>
- @furious programming
Trochę inaczej. Chodzi o to, że pliki class dla klas i interfejsów muszą być takie same, bo działają na tym samym bytecodzie. W efekcie zapewne w pierwszych wersjach Oak-a było wymagane dodawanie tych słów kluczowych. W myśl zasady ma się kompilować, a później zrobimy ładniej. Jak odpalisz javap
na pliku class interfejsu to tam te słowa są.