Pomijanie abstract w interface

0

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?

0

Od 1.3 albo 1.4 (ktoś napisał na SO, ale link mi zniknął i nie mogę teraz znależć + ofc. niezbyt potwierdzona informacja :)). Może któryś z forumowych javowców będzie wiedział (pamiętał :P) - @Krolik, @Koziołek

0

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ą.

1

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

2

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ą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0