У меня есть класс myHashSet, который расширяет класс HashSet. myHashSet переопределяет методы add() и addAll() для HashSet. Таким образом, у меня есть следующий фрагмент кода:Почему super.addAll вызывает метод переопределенного добавления
class MyHashSet<E> extends HashSet<E> {
@Override
public boolean add(E e){
return super.add(e);
}
@Override
public boolean addAll(Collection ? extends E> c){
return super.addAll(c);
}
}
Я знаю, что метод addAll реализуется через Add(), то есть он использует метод добавления(). Итак, если я вызываю addAll MyHashSet, он должен вызывать addAll(), который, в свою очередь, должен вызывать HashSet's add(). Но почему он вызывает функцию добавления() MyHashSet, когда я вызываю addAll MyHashSet()?
Здесь я смущен, извините, если вопрос очень глупый.
Это не так, как это работает. Поскольку 'add()' вызывается на 'this', а' this' является 'MyHashSet', то вызывается наиболее конкретная версия метода. –
@DekDekku Но я использую super.addAll() и super.add(), которые должны ссылаться на метод суперкласса? Здесь нет ** этого **. – shar
Вы используете 'super.addAll()' и 'super.addAll()' использует 'this.add()' (который по очереди делегирует 'super.add()', чтобы вы могли его просто удалить). –