Java - test teoretyczny

0

Witam,
W załączniku plik z pytaniami i moimi odpowiedziami czy moglibyście skorygować błędy ?

Lub dokument online:
http://sdrv.ms/15uPm5I

0

W 4 to chyba jeszcze będzie odpowiedź b) prawidłowa, w 14 raczej brak prawidłowej odpowiedzi bo metoda abc przyjmuje inta.

0

A co sadzicie o takim zestawie odpowiedzi?

0
  1. klasa nie dziedziczy po interfejsie
0

Nie wiem co autor pytań rozumie przez zwrot

Jest standardowy układem
, ale w pytaniu 18 odpowiedź (d) jest raczej poprawna. BorderLayout jest na pewno domyślnym układem w JFrame.

0

Czy jest ktos w stanie wstawic ten plik z poprawnymi odpowiedziami? Prosze o zaznaczenie prawidlowych polecen kolorem czerwonym.

0

W 6 poleceniu interface jest poprawna odpowiedzia

0
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:

  1. b
  2. a
  3. bde (c nie może być, bo B dziedziczy po A. W Javie nie ma wielodziedziczenia, żeby B było pochodne dla A i Object jednocześnie)
  4. be (chociaż wydaje mi się, że przy odwołaniu typu 'b', java pokazuje warning, że tak się nie powinno robić, bo próbujesz wywołać metodę statyczną z instancyjnego obiektu, coś takiego. Ale też powinno zadziałać)
  5. acdef
  6. bdf (z 'f' nie mam pewności, jak ten mechanizm jest rozumiany przez Javę. Niby interfejs jest implementowany, natomiast różne książki i różni wykładowcy akademiccy mają rożne podejście do tej kwestii. Wydaje mi się, że pod spodem interfejs jest zamieniany na specjalną klasę ale pewności nie mam)
  7. a (być może 'c'? Nie bardzo rozumiem o co chodzi autorowi w 'c', nie mogę sobie wyobrazić o co mu chodzi, więc nie jest wykluczone, że też będzie poprawnie)
  8. b
  9. ac
  10. abc (skoro tutaj autor napisał np. "dziedziczy po Set<E>", a Set jest interfejsem, to za pewne i w 6 odpowiedź 'f' też jest prawidłowa).
  11. BRAK PRAWIDŁOWEJ ODPOWIEDZI (wszystkie wywołania są bezargumentowe, a metoda potrzebuje jakiegoś int'a, czyli np. o.abc(30);)
  12. bd (nie tylko w pętlach można wykorzystywać interatory)
  13. cg ('g' to ogólna odpowiedź, a 'c' to uszczegółowiona)
  14. ad
  15. ef
0

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.

0

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:

  • class B extends Object (F),
  • class A extends B,
  • class D extends B,
  • itd
    Jak widać do każdego kółka (klasy) wchodzi co najwyżej jedna strzałka, natomiast wychodzi dowolna ilość. Dana klasa efektywnie dziedziczy po wszystkich klasach na ścieżce od korzenia do niej.

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1