Я наткнулся на Collection
интерфейс, который объявляет add()
метод следующим образом:
boolean add(E e);
Затем я наткнулся на Set
интерфейс, который расширяет Collection
, который объявляет add()
метод с такой же вышеуказанной сигнатурой.
Поскольку сигнатуры одинаковы, я полагаю, Set
является переопределяющим методом в Collection
. Единственное отличие, которое я могу заметить, в комментариях. Collection
говорит:
Гарантирует, что эта коллекция содержит указанный элемент.
Set
говорит:
Добавляет указанный элемент к этому набору, если он еще не существует.
Поэтому я считаю, что технически мы можем опустить объявление add
из Set
, и все же вся структура коллекций Java будет работать без любая проблема, но она существует просто потому, что в Set
, add()
имеет значение, отличное от значения в Collection
. Q1. Так ли это? Или что-то еще достигается с переопределением add()
в Set
?
Q2. Это обычный шаблон использования в рамках? Следует ли какая-либо другая иерархия интерфейса тому же самому?
Q3. Насколько правильно переопределять метод из суперинтерфейса в подчиненном интерфейсе, просто потому что он имеет другое значение в подчиненном интерфейсе, даже если он имеет такую же подпись? (Это то, что это совершенно правильно и, как и ожидалось, и я нахожу это на удивление странным, потому что впервые сталкиваюсь с этим?)