Java интерфейс и наследование - PullRequest
8 голосов
/ 01 августа 2009

Если у нас есть:

public interface Foo{}

public class Bar implements Foo{...}

Есть ли разница между:

public class BarBar extends Bar implements Foo{..}

и

public class BarBar extends Bar{..}

Я вижу много такого кода, и это всегда смущает меня. BarBar нужно реализовать Foo? Я имею в виду, поскольку он расширяет Bar для начала, разве это уже не там? Наверное, мой вопрос: для чего здесь нужна реализация Foo в BarBar?

Ответы [ 5 ]

14 голосов
/ 01 августа 2009

Основным отличием является 15 совершенно ненужных символов: -)

Когда ваш родительский класс реализует некоторый интерфейс, все методы интерфейса либо реализуются им, либо определяются (явно или неявно) как абстрактные. В любом случае, ваш класс, расширяющий родительский класс, наследует все эти методы и неявно реализует оригинальный интерфейс.

3 голосов
/ 01 августа 2009

Разницы нет. Лишние implements там безобидны, но бесполезны.

2 голосов
/ 01 августа 2009

Можно утверждать, что второе "расширяет X реализует Y" является многословным, но несколько дополнительных символов являются хорошим напоминанием. Взгляните на ArrayList и т. Д. Я уверен, что они используют длинную форму - расширяет AbstrsvtList реализует List.

В конце концов, большинство разработчиков быстро печатает, поэтому дополнительные несколько символов практически не тратят время на ввод текста. Почему так много целей в том, чтобы печатать меньше, если речь идет о ясности и устранении двусмысленности, а не изложении всех фактов ...

0 голосов
/ 01 августа 2009

Хорошо, я согласен со всеми комментариями, которые были сказаны по этому вопросу, что это действительно ненужная реализация, хотя я мог бы сделать это в случае, если я хочу переопределить поведение barbar в отношении реализации foo, поэтому я мог бы сделать это, чтобы принудительно переопределить эти методы и заставь IDE автоматически реализовать это для меня !!

Но это то же самое, что переопределить эти функции в barbar

0 голосов
/ 01 августа 2009

Нет причин для реализации foo. Так как bar - это foo, barbar тоже будет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...