Jeśli moja klasa implements
jest interfejsem, to czy mogę powiedzieć, że śledzę dziedziczenie? Wiem, że kiedy klasa jest extends
inną klasą, to jest to dziedzictwo.
java
terminology
interfaces
inheritance
definition
RajeeV VenkaT
źródło
źródło
Odpowiedzi:
AKTUALIZACJA: Poprawiłem tę odpowiedź. Podkreślono wiele dobrych punktów w komentarzach, które zasługiwały na odwołanie.
Nie jest do końca jasne, co rozumiesz przez „podążanie za spadkiem”. Zadajmy nieco inne pytanie?
Te są subtelnie różne. To niefortunne, ponieważ jest mylące.
Może pojawić się zamieszanie, ponieważ ludzie myślą o dziedziczeniu jako mechanizmie udostępniania szczegółów implementacji. Chociaż jest to taki mechanizm, mechanizm ten działa poprzez udostępnianie członków . Ci członkowie nie muszą mieć wdrożeń! Jak zobaczymy, mogą być abstrakcyjne.
Osobiście byłbym szczęśliwszy, gdyby specyfikacje Java i C # używały słowa innego niż „dziedziczy” do opisania związku między metodami interfejsu i klasami, aby uniknąć tego zamieszania. Ale nie robią tego i musimy uzasadniać na podstawie specyfikacji, a nie przeciwko nim.
Tak, niektóre są. Zobacz specyfikację Java w sekcji 8.4.8, którą cytuję tutaj dla Twojej wygody.
Jeśli powiesz, że klasa implementuje interfejs, klasa dziedziczy abstrakcyjne i domyślne metody tego interfejsu . (Oczywiście pominąłem następujące warunki; zobacz szczegóły w specyfikacji. W szczególności nie uważa się , że klasa, która implementuje element interfejsu, odziedziczyła ten element. Ponownie, czy to jest mylące? Tak.)
Zazwyczaj powiedzielibyśmy, że klasa implementuje interfejs. Jak wspomniano powyżej, klasa może dziedziczyć elementy po interfejsie, a mimo to nie można powiedzieć, że dziedziczy po interfejsie. Co jest mylące, tak.
Zazwyczaj nie. Tego rodzaju wąskie analizowanie specyfikacji jest bardziej przydatne dla autorów kompilatorów niż dla programistów biznesowych. Ważniejsze jest, aby zrozumieć, kiedy używać interfejsu, niż uzyskać dokładną definicję „dziedziczy po”.
źródło
java
więc jest to prawidłowa odpowiedź, chyba że OP oznaczało innejava
:-)Dziedziczenie oznacza napisanie nowej podklasy dla nadklasy. Pisanie nowej klasy przeciwko interfejsowi implementuje ten interfejs. (A pisanie nowego interfejsu opartego na starym rozszerza ten interfejs).
Jedynym poprawnym terminem, który dotyczy wszystkich trzech możliwości, jest podtyp . Nie każdy podtyp jest podklasą.
źródło
Z podklasami ty
Dzięki interfejsom wypełniasz umowę, wdrażając zadeklarowane metody.
To klasyczny sposób patrzenia na to. Teraz w Javie 8 interfejsy stają się mieszanką:
Czy wdrożenie interfejsu, którego metody mają wszystkie implementacje domyślne, nadal liczy się jako „implement”, czy raczej jako rozszerzenie? Nie mogłem powiedzieć Ponieważ ten przypadek jest dość daleko posunięty (to faktycznie włączyło bezpaństwowe wielokrotne dziedziczenie), nadal używałbym „dziedziczenia” tylko z podklasami.
źródło