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. Потому что бар - это тоже самое. Барбар тоже будет.