Od javy 8 została wprowadzona interesująca zmiana. Dotychczas interfejs definiował tylko sygnatury metod (czyli zwracany typ, nazwę metody i typy argumentów bez implementacji tej metody). Przykładowo:
public interface Foo {
void doSomething();
}
Deklarując, że klasa implementuje interfejs, wymuszało się implementację tych metod w owej klasie.
Od javy 8, wprowadzono możliwość zdefiniowania domyślnej implementacji metody:
public interface Foo {
default void doSomething() {
//Method body
}
}
Interfejs nie musi już zawierać tylko deklaracji metod, może zawierać domyślną implementację!
Co to daje w praktyce?
Plusy:
Możesz napisać domyślną metodę, co może oszczędzić powielenia kodu w klasach implementujących interfejs. Klasa implementująca interfejs nie musi implementować metod, które mają domyślną implementację, ale w przypadkach gdy to potrzebne, można je nadpisać w danej klasie.
public interface Foo {
void doSomething();
}
Deklarując, że klasa implementuje interfejs, wymuszało się implementację tych metod w owej klasie.
Od javy 8, wprowadzono możliwość zdefiniowania domyślnej implementacji metody:
public interface Foo {
default void doSomething() {
//Method body
}
}
Interfejs nie musi już zawierać tylko deklaracji metod, może zawierać domyślną implementację!
Co to daje w praktyce?
Plusy:
Możesz napisać domyślną metodę, co może oszczędzić powielenia kodu w klasach implementujących interfejs. Klasa implementująca interfejs nie musi implementować metod, które mają domyślną implementację, ale w przypadkach gdy to potrzebne, można je nadpisać w danej klasie.