Wpis z mikrobloga

Mam 2 pytania:
1. Jaka jest różnica między interfejsem a klasą abstrakcyjną od javy 8?
- Obiekt związany z klasą abstrakcyjną może posiadać stan(public, protected, private) w przeciwieństwie do interfejsu(wszystkie final, static).
- metody w interfejsie tylko publiczne
- klasa abstrakcyjna może posiadać konstruktor
coś jeszcze?

2. Różnica między klasą a metodą anonimową w javie?

#java #naukaprogramowania
  • 7
@nick230: 1. interfejs nie może posiadać metod z implementacją za wyjątkiem metod statycznych
2. metody anonimowe (wyrażenia lambda) to szybszy zapis na stworzenie nowego obiektu implementującego interfejs z tylko jedną metodą
@nick230 @baczus: Ad. 1 Nieprawda, może. Metody domyślne nie są statyczne.
Ad. 2 Mieszasz Cumplu, bo to wiele więcej niż tylko kwestia zapisu. To również sprawa wydajności i dość złożonego życia wewnętrznego JVM.
Zasadniczo, klasy anonimowe tworzone są w czasie kompilacji Twojego kodu do interpretowanego przez JVM bytecode'u, zapisywane na dysku, a następnie podczas ich pierwszego użycia, classloader ładuje je do pamięci i inicjalizuje. Wyrażenia lambda działają inaczej. Są kompilowane już
@nick230
2. masz cos jeszcze dodatkowego:
-anonimowa klasa definiuje nowy scope (mozesz przeslonic nazwe zmiennej lokalnej lub globalnej), lambda tego nie robi.
-z anonimowej klasy implementujacej interfejs mozesz wywolac metode defaultowa tego interfejsu; z wyrazenia lambdy nie mozesz tego zrobic

@kitke
Cos chyba nie tak. W czasie dzialania programu z wyrazen lambda jak i z anonimowych klas powstaja obiekty. Roznica taka jak opisales, podczas ladowania (dysk vs generowanie kodu runtime)

Lambdy wcale