OCPJP zadanie (interfejsy a klasa abstrakcyjna)

0

Witam przeglądam sobie przykładowe zadania z zestawu testów na OCPJP i trafiłem na takie zadanie:

Given:
public interface Word {boolean isSpelled(String w); }

And three files:

1. abstract class Verb1 implements Word{boolean isSpelled(){}}

2. abstract class Verb2 implements Word{boolean isSpelled(){return true;}}

3. abstract class Verb3 implements Word{boolean isSpelled(String w){return true;}}

Which is true:
A. Only the first file will compile
B. Only the first and second files will compile.
C. Only the first and third will compile.
D. Only the second file will  compile.
E. All three files will compile. 

W odpowiedziach mam odpowiedź, że D (tylko 2) się skompiluje, jednak wydaje mi się, że dobra odpowiedź to taka w której 2 i 3 się skompilują

0
  1. się nie skompiluje, bo klasa nie implementuje interfejsu.

edit: pomyłka, 2. powinno być zamiast 3.

1
  1. się nie skompiluje ponieważ ograniczasz widoczność metody. Wszystkie metody interfejsu są z definicji publiczne, w 3. tworzysz implementację z metodą o niższym (package-private) poziomie widoczności stąd błąd.
2

To jest podchwytliwe pytanie.

  1. Nie skompiluje się bo ma zwracać boolean a nie zwraca nic
  2. Skompiluje się bo nie implementuje co prawda metody z interfejsu, ale klasa jest abstrakcyjna więc będzie ok, a metoda którą implementuje jest w porządku
  3. Nie skompiluje się bo klasa próbuje implementować metodę interfejsu ale zmienia jej widoczność. Interfejs ma metody publiczne a nasza klasa nr 3 nie ma modyfikatora więc defaultowo jest to package-level. Nie wolno tak "ograniczyć" widoczności bo byłoby to złamanie zasady podstawiania.
0

czyli jak mam interfejs, w nim metode public boolean isSpelled(String argument); i zaimplementuje go do jakiejs klasy, to moge stworzyc metode public boolean isSpelled(); i wtedy bedzie ona traktowana jako ta zaimplementowana z interfejsu?
Bo jeśli tak nie jest to w takim razie żadna z tych 3 klas nie implementuje interfejsu poprawnie

  1. I dlaczego 1 sie skompiluje? przeciez implementuje interfejs, ale nie posiada jego metody? (chyba ze jak pisze wyzej: mozna przeciazyc te metode?) a nie zwracać wartosci moze dlatego, ze jest klasa abstrakcyjna?

  2. Tu by znowu wychodziło - że można przeciążyc metode interfejsu, bo jest metoda o tej samej nazwie ale bez argumentu

  3. Nie skompiluje sie bo mimo ze metoda jest z interfejsu zaimplementowana poprawnie to specyfikator dostepu jest nie publiczny a pakietowy?

Prosze o drobne wyjaśnienie tematu, przyda sie :)

0

A czy ktoś twierdzi ze któraś klasa poprawnie go implementuje? To są klasy abstrakcyjne więc nie muszą implementować. Tym się różni zwykła klasa od abstrakcyjnej że abstrakcyjna może mieć niezaimplementowane metody.

0

to rozumiem, że klasa abstrakcyjna moze miec metody: własne z implementacja, własne bez implementacji, oraz implementowac interfejs z ktorego metod może, ale nie musi implementować? :D

0

czy ma ktoś może godne polecenia zestawy testów od ocpjp w miarę przystępnej cenie

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