default metoda w interfaceach

default metoda w interfaceach
Władyslaw Parchomenko
Władyslaw Parchomenko
  • Rejestracja:ponad 6 lat
  • Ostatnio:8 miesięcy
  • Postów:63
1

WHAT? Czemu tam znajduje się metoda default już implementowana w interfaceach? Możecie powiedzieć po co ona jest potrzebna i kiedy ją używać(przykład) ;3

Kopiuj
public interface MicrowaveOven {

 void start();

 void setDuration(int durationInSeconds);

 boolean isFinished();

 void setPower(int power);

 default String getName() {
         return "MicrovaweOwen";
 }
}
edytowany 3x, ostatnio: Shalom
K5
  • Rejestracja:około 6 lat
  • Ostatnio:3 dni
  • Postów:1002
1

Słowo kluczowe default sprawia, że metoda musi mieć ciało.

Do czego się używa?
Wyobraź sobie, że masz x klas implementujących interfejs. Chcesz dodać do interfejsu nową metodę bez ingerowania we wszystkie inne klasy implementujące.
Dzięki metodom defaultowym, każda z tych klas, "ma" już tą metodę. Skoro nie chcemy ingerować w implementacje klas implementujacych interfejs, dodajemy ciało metody defaultowej już w interfejsie.

Władyslaw Parchomenko
Władyslaw Parchomenko
Czyli to jak w abstraktnych klasach, że też możemy implementować ciało, ale tutaj używamy słówko default?
K5
W klasie abstrakcyjnej, metoda może mieć ciało gdy nie jest metodą abstrakcyjną.
MF
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Kraków
  • Postów:58
1

Używając domyślnych metod możesz 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żesz je nadpisać w klasie implmentującej.


Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Wyobraź sobie że chcesz zrobić interfejs ale chcesz zeby każda klasa miała pewną metodę już zaimplementowaną. Jednocześnie niekoniecznie możesz zrobić klasę abstrakcyjną, bo może jakaś klasa implementująca ten interfejs ma już nadklasę.
Można też używać tego jak mixinów/traitów, czyli sposób na "wrzucenie" metody (często takiej jakiejś uniwersalnej / cross-cutting) do klasy.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Władyslaw Parchomenko
Władyslaw Parchomenko
Kurczę, mnie interesujesz w jakim mieście i kraje mieszkasz, ze swoim doświadczeniem i wiedzą w programowaniu?)
FI
filemonczyk
pewnie w nibylandii
Shalom
Nie jest to żadna tajemnica, ba, można nawet w moim profilu cośtam wyczytać.
CS
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 22 godziny
  • Postów:296
0

Możesz wykorzystać metodę default w swoich przykładzie np. to tego:

Kopiuj
public interface MicrowaveOven {

 void start();

 void setDuration(int durationInSeconds);

 boolean isFinished();

 void setPower(int power);

default  void bake(int power, int durationSeconds) throws InterruptedException{
 setPower(power);
 setDuration(durationSeconds);
 start();
 while(!isFinished(){
  Thread.sleep(100);
 }
}

 default String getName() {
         return "MicrovaweOwen";
 }
}
Shalom
Obawiam sie że przykład z takim TemplateMethod tylko koledze utrudni zrozumienie :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.