Krótka historia: Listonosz proszony jest o powrót do domu po domu i otrzymanie okładek zawierających (listy, dokumenty, czeki, karty podarunkowe, podanie, list miłosny) z adresem podanym na doręczeniu.
Załóżmy, że nie ma osłony i poproś listonosza, aby poszedł do domu po domu i odebrał wszystkie rzeczy i dostarczył innym ludziom, listonosz może się pomylić.
Lepiej więc zawiń go w osłonę (w naszej historii jest to interfejs), wtedy wykona swoją pracę dobrze.
Teraz zadaniem listonosza jest przyjmowanie i dostarczanie tylko okładek (nie przejmowałby się tym, co jest w okładce).
Utwórz typ interface
niefaktyczny, ale zaimplementuj go z typem faktycznym.
Tworzenie do interfejsu oznacza, że otrzymujesz komponenty dopasowują się do reszty kodu
Dam ci przykład.
masz interfejs AirPlane, jak poniżej.
interface Airplane{
parkPlane();
servicePlane();
}
Załóżmy, że masz metody w swojej klasie samolotów typu Controller
parkPlane(Airplane plane)
i
servicePlane(Airplane plane)
zaimplementowane w twoim programie. Nie spowoduje to przerwania twojego kodu. To znaczy, nie musi się zmieniać, dopóki akceptuje argumenty jakoAirPlane
.
Ponieważ będzie akceptować każdego samolotu pomimo rzeczywistego typu, flyer
, highflyr
,fighter
, itd.
Ponadto w kolekcji:
List<Airplane> plane;
// Zabierze wszystkie twoje samoloty.
Poniższy przykład wyjaśni twoje zrozumienie.
Masz samolot myśliwski, który go implementuje, więc
public class Fighter implements Airplane {
public void parkPlane(){
// Specific implementations for fighter plane to park
}
public void servicePlane(){
// Specific implementatoins for fighter plane to service.
}
}
To samo dotyczy HighFlyer i innych klases:
public class HighFlyer implements Airplane {
public void parkPlane(){
// Specific implementations for HighFlyer plane to park
}
public void servicePlane(){
// specific implementatoins for HighFlyer plane to service.
}
}
Teraz pomyśl, że twoje klasy kontrolerów używają AirPlane
kilka razy,
Załóżmy, że twoja klasa Controller to ControlPlane jak poniżej,
public Class ControlPlane{
AirPlane plane;
// so much method with AirPlane reference are used here...
}
Tutaj pojawia się magia, ponieważ możesz tworzyć AirPlane
instancje nowego typu tyle, ile chcesz i nie zmieniasz kodu ControlPlane
klasy.
Możesz dodać instancję ...
JumboJetPlane // implementing AirPlane interface.
AirBus // implementing AirPlane interface.
Możesz także usunąć instancje wcześniej utworzonych typów.