Witam,
W załączniku plik z pytaniami i moimi odpowiedziami czy moglibyście skorygować błędy ?
Lub dokument online:
http://sdrv.ms/15uPm5I
- Egzamin JAVA - moje odpowiedzi.doc (53 KB) - ściągnięć: 528
Witam,
W załączniku plik z pytaniami i moimi odpowiedziami czy moglibyście skorygować błędy ?
Lub dokument online:
http://sdrv.ms/15uPm5I
A co sadzicie o takim zestawie odpowiedzi?
JMarcin napisał(a):
Witam,
W załączniku plik z pytaniami i moimi odpowiedziami czy moglibyście skorygować błędy ?Lub dokument online:
http://sdrv.ms/15uPm5I
Moim zdaniem będzie tak:
Dzięki Lena(R). Hmm tylko jeszcze jedno mnie zastanawia, no bo w javie chyba każda klasa dziedziczy niejawnie po Object, więc zastanawiam się nad tym pytaniem z
class B extends A, zastanawia mnie czy tutaj B jednak też dziedziczy po Object, chociaż z drugiej strony tak jak Ty mówisz, w Javie nie ma wielokrotnego dziedziczenia.
Jeżeli klasa K1 dziedziczy po Object, klasa K2 dziedziczy po K1, klasa K3 dziedziczy po K2, ...., klasa K(N) dziedziczy po K(N-1), to efektywnie klasa K(N) dziedziczy po wszystkich klasach ze zbioru: {Object, K1, K2, K3, ...., K(N-1)}. Nie ma tutaj wielodziedziczenia, bo wielodziedziczenie jest wtedy gdy hierarchia dziedziczenia nie tworzy drzewa, ponieważ jakiś węzeł ma dwoje lub więcej rodziców. To że bez wielodziedziczenia wydaje się, że to wielodziedziczenie jest wynika z przechodniości relacji dziedziczenia.
Obrazowo można przedstawić to na przykładzie tego: http://pl.wikipedia.org/wiki/Plik:Sorted_binary_tree.svg
Załóżmy, że F to java.lang.Object oraz strzałka z klasy X do klasy Y oznacza, że Y extends X. A więc:
Wielodziedziczenie można obrazowo przedstawić np tak: http://en.wikipedia.org/wiki/File:Directed_acyclic_graph_3.svg
Tu widać, że do niektórych kółek (klas) wchodzi więcej niż jedna strzałka, a więc występuje wielodziedziczenie.
Wielodziedziczenie w Javie występuje tylko w przypadku interfejsów, tzn zarówno interfejs może rozszerzać wiele interfejsów, jak i klasa może implementować wiele interfejsów naraz.
Dzięki temu, że nie ma wielodziedziczenia unika się tzw diamond problem: http://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem
Polega to na tym, że w Javie wywołanie metody na danym obiekcie skutkuje wywołaniem metody z klasy najniżej w hierarchii (najdalej od korzenia, czyli Object), w której zdefiniowana jest ta metoda - ale na ścieżce do klasy obiektu. A więc jest prosto i przejrzyście. W przypadku wielodziedziczenia byłby problem typu: z której ścieżki dziedziczenia skorzystać przy wyszukiwaniu docelowej metody? Bez wielodziedziczenia jest tylko jedna ścieżka z korzenia, więc nie ma takiego problemu.