Chodzi mi o to że:
interface B {...}
interface A extends B {...} // allowed
interface A implements B {...} // not allowed
Wyszukałem w Google i znalazłem to :
implements
oznacza zdefiniowanie implementacji metod interfejsu. Jednak interfejsy nie mają implementacji, więc nie jest to możliwe.
Jednak interfejs jest w 100% klasą abstrakcyjną, a klasa abstrakcyjna może implementować interfejsy (w 100% klasa abstrakcyjna) bez implementowania swoich metod. Jaki jest problem, kiedy definiuje się jako „interfejs”?
W szczegółach,
interface A {
void methodA();
}
abstract class B implements A {} // we may not implement methodA() but allowed
class C extends B {
void methodA(){}
}
interface B implements A {} // not allowed.
//however, interface B = %100 abstract class B
źródło
implements
oznacza, że zachowanie zostanie zdefiniowane dlaabstract
metod (z wyjątkiem oczywiście klas abstrakcyjnych), definiujesz implementację.extends
oznacza, że zachowanie jest dziedziczone.W przypadku interfejsów można powiedzieć, że jeden interfejs powinien mieć takie samo zachowanie jak inny, nie ma nawet rzeczywistej implementacji. Dlatego bardziej sensowne jest używanie interfejsu do
extends
innego interfejsu, zamiast go implementować.Na marginesie, pamiętaj, że nawet jeśli
abstract
klasa może definiowaćabstract
metody (rozsądny sposób, w jaki robi to interfejs), nadal jest klasą i nadal musi być dziedziczona (rozszerzana), a nie implementowana.źródło
Koncepcyjnie istnieją dwie klasy „domen” i interfejsy. Wewnątrz tych domen, które zawsze rozszerzasz, tylko klasa implementuje interfejs, co jest swego rodzaju „przekraczaniem granicy”. Zatem zasadniczo „rozszerza” dla interfejsów odzwierciedla zachowanie klas. Przynajmniej myślę, że taka jest logika. Wygląda na to, że nie wszyscy zgadzają się z tego rodzaju logiką (sam uważam, że jest to trochę wymyślone) i tak naprawdę nie ma żadnego technicznego powodu, aby w ogóle mieć dwa różne słowa kluczowe.
źródło
To jest po prostu kwestia konwencji. Twórcy języka java zdecydowali, że „rozszerza się” to najlepszy sposób na opisanie tej relacji, więc wszyscy tego używamy.
Ogólnie rzecz biorąc, nawet jeśli interfejs jest „klasą w 100% abstrakcyjną”, nie myślimy o nim w ten sposób. Zwykle myślimy o interfejsach jako o obietnicy implementacji pewnych kluczowych metod, a nie jako klasie, z której można wywodzić. Dlatego mamy tendencję do używania innego języka dla interfejsów niż dla klas.
Jak twierdzą inni, istnieją dobre powody, aby wybrać „rozciąga się” zamiast „narzędzi”.
źródło
Mam nadzieję, że pomoże ci to trochę to, czego nauczyłem się podczas studiów na uczelni oops (core java).
Implements oznacza zdefiniowanie implementacji metod interfejsu. Jednak interfejsy nie mają implementacji, więc nie jest to możliwe. Interfejs może jednak rozszerzać inny interfejs, co oznacza, że może dodawać więcej metod i dziedziczyć jego typ.
Oto przykład poniżej, to jest moje zrozumienie i to, czego nauczyłem się w Ups.
i miej na uwadze jeden interfejs może tylko rozszerzyć inny interfejs i jeśli chcesz zdefiniować jego funkcję w jakiejś klasie to tylko interfejs jest zaimplementowany np. poniżej
Gdyby klasa miała zaimplementować ten interfejs, wyglądałby tak:
a jeśli klasa abstrakcyjna ma jakąś abstrakcyjną funkcję zdefiniowaną i zadeklarowaną i chcesz zdefiniować te funkcje lub możesz powiedzieć, że zaimplementuj tę funkcję, to przypuszczasz, że rozszerzasz tę klasę, ponieważ klasa abstrakcyjna może być rozszerzana tylko. oto przykład poniżej.
Oto przykład podklasy MyAbstractClass:
źródło
Interfejs jest jak abstrakcja, która nie zapewnia żadnej funkcjonalności. Dlatego nie „wdraża”, ale rozszerza inne abstrakcje lub interfejsy.
źródło
Interface to klasa, która zawiera abstrakcyjną metodę, która nie może stworzyć żadnego obiektu. Ponieważ Interface nie może stworzyć obiektu i nie jest to czysta klasa, nie warto go implementować.
źródło