Java интерфейс и наследование

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

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 ответов

Решение

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

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

Нет никакой разницы. Экстра implements там безобидно, но бесполезно.

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

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

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

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

Нет причин для реализации foo. Потому что бар - это тоже самое. Барбар тоже будет.

Другие вопросы по тегам