2009-08-01 12 views
8

Jeśli mamy:Interfejs Java i dziedziczenie

public interface Foo{} 

public class Bar implements Foo{...} 

Czy istnieje różnica pomiędzy:

public class BarBar extends Bar implements Foo{..} 

i

public class BarBar extends Bar{..} 

Widzę dużo kodu w ten sposób i zawsze dezorientuje mnie. Czy BarBar trzeba wdrożyć Foo? Mam na myśli to, że od tego czasu zaczyna się Bar, czy już tam nie ma? Domyślam się, że moje pytanie brzmi, w jakim celu służy tutaj implementacja Foo w?

Odpowiedz

14

Główną różnicą jest 15 całkowicie niepotrzebne znaki :-)

Gdy klasa dominująca wdraża pewne interfejs, wszystkie metody interfejsu są realizowane albo przez niego lub są zdefiniowane (bezpośrednio lub pośrednio) jako abstrakcyjny. Tak czy inaczej, rozszerzenie klasy nadrzędnej dziedziczy wszystkie te metody i domyślnie implementuje oryginalny interfejs.

3

Nie ma różnicy. Dodatkowy implements jest nieszkodliwy, ale bezużyteczny.

0

Nie ma powodu do wdrożenia foo. Ponieważ bar to barbarzyński barbar, również będzie.

0

Cóż, zgadzam się ze wszystkimi komentarzami, które zostały powiedziane na ten temat, że jest to naprawdę niepotrzebne wdrożenie, chociaż mógłbym to zrobić na wypadek, gdyby chciałem zastąpić zachowanie barbara dotyczące implementacji foo, więc mogę to zrobić, aby wymusić nadpisanie metody i spraw, aby IDE automatycznie je zaimplementował !!

Ale jej to samo, co te funkcje nadrzędne w Barbar

2

Można argumentować, że drugi „rozciąga X implementuje Y” jest gadatliwy, ale kilku dodatkowych znaków są dobrym przypomnieniem. Spójrz na ArrayList itp. Jestem prawie pewien, że używają długiej formy - rozszerza Listę narzędzi AbstrsvtList.

W końcu większość programistów to szybkie czcionki, więc dodatkowe kilka znaków kosztuje praktycznie nie ma czasu na pisanie. Dlaczego tak wiele celów związanych z pisaniem jest mniej, gdy powinno być jasność i eliminowanie niejednoznaczności, a nie podawanie wszystkich faktów ...