Istnieje kilka relacji dziedziczenia w interfejsach kolekcji Java. Na przykład interfejs Collection<T>
rozszerzy się na Iterable<T>
. Sprawdziłem kod źródłowy w JDK, niektóre metody zdefiniowane w klasie bazowej powtarzają się w podklasach kilka razy. Na przykład: Interable<T>
interfejs zdefiniowano metodę Iterator<E> iterator();
Ale w interfejsie Collection<E>
i List<T>
, również zawierają tę samą metodę. W moim rozumieniu, skoro dziedziczenie jest używane do ograniczenia duplikacji, dlaczego mielibyśmy zdefiniować tę samą metodę w podklasach? InterfejsDziedziczenie w interfejsach kolekcji java
Odpowiedz
został wprowadzony później: since 1.5
. Więc wcześniej do tej wersji tylko podklasy java.util.Collection
używane do implementacji iterator()
.
Później iterator()
został standardem, wprowadzając interfejs Iterable
, tak że każda klasa, która może iterować, może zaimplementować ten interfejs.
Po wprowadzeniu interfejsu Iterable
interfejs Collection
został również rozszerzony o interfejs Iterable
, dzięki czemu interfejs Collection
implementuje również interfejs standardowy.
Ex,
java.sql.SQLException
realizuje również iterable
Zobacz w java.util.List
„Interfejs Lista umieszcza dodatkowe postanowienia, poza wymienionymi w interfejsie zbiórki, w kontrakty metod iteratora, dodawania, usuwania, równań i hashCode. Deklaracje dotyczące innych dziedziczonych metod są również e dla wygody. "
+1 W rzeczywistości zgaduję, że powody redeclaring tych metod są (jako cytat, który wysłałeś stany): 1. możliwość dodawania różnych komentarzy JavaDoc (tj. Umów, które są wymienione) i 2. dla wygody dostarczenia szybki przegląd dostępnych metod. – Thomas
Collection
ukazał się w wydaniu 1.2, ale Iterable
wyszedł potem w wydaniu 1.5, aby umożliwić zwięzłe for-pętle, więc myślę, że to był przypadek utrzymanie interfejs Collection
i Javadocs samo pomiędzy wersjami. Ale masz rację, nie ma powodu, aby nie można było usunąć metody iterator()
z Collection
, wszystko by się jeszcze skompilowało.
Interfejs Collection
Interfejs rozciąga się na:Iterable
. Klasa abstrakcyjna abstrakcyjna implementuje metody wspólne dla kilku klas, w przypadku list jest to AbstractList
, z każdą klasą betonu (powiedzmy, ArrayList
lub LinkedList
) dostarczającą szczegółowe szczegóły implementacji.
W rzeczywistości, jak można się domyślić, dziedziczenie służy do ograniczenia duplikacji kodu. Ale właśnie z tego powodu wszystkie podklasy będą zawierały te same operacje zdefiniowane w nadklasach, szczegóły implementacji wspólne dla kilku klas pojawią się tylko raz w hierarchii klas na abstrakcyjnym poziomie klasy, i nie są "zdefiniowane" ponownie w klasie. podklasy - tylko części, które się zmieniają, są przedefiniowane w konkretnych podklasach.
- 1. Dziedziczenie i enkapsulacji klas kolekcji w Javie
- 2. Dziedziczenie Java
- 3. Interfejs Java i dziedziczenie
- 4. Dziedziczenie Java zmienna instancji
- 5. rodzajowych Java i dziedziczenie
- 6. Dziedziczenie konstruktora Java?
- 7. Czy można używać dziedziczenia w interfejsach AIDL?
- 8. konkretne metody w interfejsach Java1.8
- 9. Tworzenie równoległej kolekcji Scala z kolekcji Java
- 10. Jaki jest statyczny typ "tego" w domyślnych interfejsach Java 8?
- 11. Dziedziczenie i dziedziczenie interfejsu
- 12. Java 8 domyślna metoda dziedziczenie
- 13. Java ORM: Wielokrotne dziedziczenie (interfejs)
- 14. serializacji obiektu Java i dziedziczenie
- 15. Dziedziczenie klasy z argumentów konstruktora w java
- 16. Implementowanie właściwości interfejsu w interfejsach?
- 17. Adnotacje na interfejsach?
- 18. Jakiej biblioteki kolekcji Java polecasz?
- 19. Java otrzymuje ogólny typ kolekcji
- 20. Java Generics: dodanie niewłaściwego typu w kolekcji
- 21. Jak używać literałów kolekcji w Java 7?
- 22. Java otrzymuję ostatni element kolekcji
- 23. Dziedziczenie adnotacji w hibernacji?
- 24. Wyświetlanie interfejsów w interfejsach w Go
- 25. Java Dziedziczenie wielu, pozbyć się duplikatu kodu
- 26. Java Interfejs: dziedziczenie, nadrzędne i przeciążenia Metody
- 27. UDP-Broadcast na wszystkich interfejsach
- 28. Dlaczego właściwości nie są deklarowane w interfejsach
- 29. Właściwy typ dla uchwytów w interfejsach C
- 30. PHP: Czy mogę używać pól w interfejsach?
Od kiedy odnosi się do interfejsów, nie ma nadrzędnego znaczenia. – Thomas