Модуль 3. Урок 5. Аннотация @Override в Java.

Для перемещения по курсу нужно зарегистрироваться

1. Модуль 1. Урок 1. Введение в Java. ↳ теория

2. Модуль 1. Урок 2. Виды языков программирования и место языка Java среди них. ↳ теория / тесты

3. Модуль 1. Урок 3. Из чего состоит Java. ↳ теория / тесты

4. Модуль 1. Урок 4. Основы работы в терминале (ознакомительный). ↳ теория / тесты

5. Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java. ↳ теория / тесты

6. Модуль 2. Урок 1. Введение в ООП. ↳ теория / тесты

7. Модуль 2. Урок 2. Типы данных в Java. ↳ теория / тесты

8. Модуль 2. Урок 3. Работа с экземплярами в Java. ↳ теория / тесты

9. Модуль 2. Урок 4. Пакеты в Java. ↳ теория / тесты

10. Модуль 3. Урок 1. Основы использования и создания методов в классах. ↳ теория / тесты

11. Модуль 3. Урок 2. Аргументы и результаты работы методов. Рефакторинг. ↳ теория / тесты

12. Модуль 3. Урок 3. Уровни методов в Java.

↳ теория / тесты

13. Модуль 3. Урок 4. Наследование в Java. ↳ теория / тесты

14. Модуль 3. Урок 5. Аннотация @Override в Java. ↳ теория / тесты

15. Модуль 4. Урок 1. Условный оператор IF в Java. ↳ теория / тесты

16. Модуль 4. Урок 2. Массивы в Java. ↳ теория / тесты

17. Модуль 4. Урок 3. Циклы в Java. ↳ теория / тесты

18. Модуль 4. Урок 4. Оператор SWITCH в Java. ↳ теория / тесты

19. Модуль 5. Урок 1. Уровни доступа в Java. ↳ теория / тесты

20. Модуль 5. Урок 2. Конструкторы в Java. ↳ теория / тесты

21. Модуль 5. Урок 3. Неизменяемые объекты. ↳ теория / тесты

22. Модуль 5. Урок 4. Паттерн проектирования Builder. ↳ теория / тесты

23. Модуль 5. Урок 5. Перечисления в Java. ↳ теория / тесты

24. Модуль 6. Урок 1. Составные строки в Java. ↳ теория / тесты

25. Модуль 6. Урок 2. Манипуляции c символами. ↳ теория / тесты

26. Модуль 6. Урок 3. Преобразование строк в числа и обратно. ↳ теория / тесты

27. Модуль 7. Урок 1. Интерфейсы в Java. ↳ теория / тесты

28. Модуль 7. Урок 2. Абстрактные классы. ↳ теория / тесты

29. Модуль 7. Урок 3. Интерфейс List в Java. ↳ теория / тесты

30. Модуль 8. Урок 1. Nested (static) классы в Java. ↳ теория / тесты

31. Модуль 8. Урок 2. Inner (non-static) классы в Java. ↳ теория / тесты

32. Модуль 8. Урок 3. Анонимные классы в Java. ↳ теория / тесты

33. Модуль 9. Урок 1. Исключения в Java. ↳ теория / тесты

34. Модуль 9. Урок 2. Иерархия исключений. ↳ теория / тесты

35. Модуль 10. Урок 1. Проект ХО. ↳ теория

36. Модуль 10. Урок 2. Проект ХО. ↳ теория

37. Модуль 10. Урок 3. Проект ХО. ↳ теория

38. Модуль 10. Урок 4. Проект ХО. ↳ теория

Порой обучение продвигается с трудом. Сложная теория, непонятные задания… Хочется бросить. Не сдавайтесь, все сложности можно преодолеть. Рассказываем, как

Не понятна формулировка, нашли опечатку?

Выделите текст, нажмите ctrl + enter и опишите проблему, затем отправьте нам.

В течение нескольких дней мы улучшим формулировку или исправим опечатку

Что-то не получается в уроке?

Загляните в раздел «Обсуждение»:

  1. Изучите вопросы, которые задавали по уроку другие студенты — возможно, ответ на ваш уже есть
  2. Если вопросы остались, задайте свой. Расскажите, что непонятно или сложно, дайте ссылку на ваше решение. Обратите внимание — команда поддержки не отвечает на вопросы по коду, но поможет разобраться с заданием или выводом тестов
  3. Мы отвечаем на сообщения в течение 2-3 дней. К «Обсуждениям» могут подключаться и другие студенты. Возможно, получится решить вопрос быстрее!

Подробнее о том, как задавать вопросы по уроку

Ответы на вопросы на собеседование Java core (часть 2). | Вопросы на собеседование Junior Java Developer.

  • Возможно ли при переопределении (override) метода изменить: 
    1. Модификатор доступа
    2. Возвращаемый тип
    3. Тип аргумента или количество
    4. Имя аргументов
    5. Изменять порядок, количество или вовсе убрать секцию throws?
  1. Да, если расширять (package -> protected -> public)
  2. Да, если выполняется Downcasting(понижающее преобразование, преобразование вниз по иерархии) то есть возвращаемый тип в переопределенном методе класса наследника должен быть НЕ шире чем в классе родителе (Object -> Number -> Integer)
  3. Нет, в таком случае происходит Overload(перегрузка)
  4. Да
  5. Возможно изменять порядок. Возможно вовсе убрать секцию throws в методе, так как она уже определена. Так же возможно добавлять новые исключения, которые наследуются от объявленных или исключения времени выполнения.

Переопределение методов действует при наследовании классов, т.е. в классе наследнике объявлен метод с такой же сигнатурой что и в классе родителе. Значит этот метод переопределил метод своего суперкласса.

Несколько нюансов по этому поводу:

  • Модификатор доступа в методе класса наследника должен быть НЕ уже чем в классе родителе, иначе будет ошибка компиляции.
  • Описание исключения в переопределенном методе класса наследника должен быть НЕ шире чем в классе родителе, иначе ошибка компиляции.
  • Метод обьявленный как «private» в классе родителе нельзя переопределить!

  • Что такое autoboxing?

Autoboxing/Unboxing — автоматическое преобразование между скалярными типами Java и соответствующими типами-врапперами (например, между int — Integer).

Наличие такой возможности сокращает код, поскольку исключает необходимость выполнения явных преобразований типов в очевидных случаях.

  • Что такое Generics?

«Java Generics» — это технический термин, обозначающий набор свойств языка позволяющих определять и использовать обобщенные типы и методы. Обобщенные типы или методы отличаются от обычных тем, что имеют типизированные параметры. 

Примером дженериков или обобщенных типов может служить библитека с коллекциями в Java. Например, класс LinkedList<E> — типичный обобщенный тип. Он содержит параметр E, который представляет тип элементов, которые будут храниться в коллекции. Вместо того, чтобы просто использовать LinkedList, ничего не говоря о типе элемента в списке, мы можем использовать LinkedList<String> или LinkedList<Integer>.  Создание объектов обобщенных типов происходит посредством замены параметризированных типов реальными типами данных. Класс типа LinkedList<E> —  обобщенный тип, который содержит параметр E.

Создание объектов, типа LinkedList<String> или LinkedList<Integer> называются параметризированными типами, а String и Integer — реальные типы аргументов. 

  • Какова истинная цель использования обобщенных типов в Java? 

Обобщенные типы в Java были изобретены, в первую очередь, для реализации обобщенных коллекций.

  • Каким образом передаются переменные в методы, по значению или по ссылке?

В java параметры в методы передаются по значению, тоесть создаются копии параметров и с ними ведется работа в методе. В случае с примитивными типами, то при передачи параметра сама переменная не будет меняться так как в метод просто копируется ее значение.

А вот при передачи объекта копируется ссылка на объект, тоесть если в методе мы поменяем состояние объекта, то и за методом состояние объекта тоже поменяется. Но если мы этой копии ссылки попытаемся присвоить новую ссылку на обьект, то старая ссылка у нас не изменится.

 В случае передачи по значению параметр копируется. Изменение параметра не будет заметно на вызывающей стороне.

 В Java объекты всегда передаются по ссылке, а примитивы — по значениюю.

  • Какие методы есть у класса Object?

Object это базовый класс для всех остальных объектов в Java. Каждый класс наследуется от Object. Соответственно все классы наследуют методы класса Object.

Методы класса Object:

  • public final native Class getClass()
  • public native int hashCode()
  • public boolean equals(Object obj)
  • protected native Object clone() throws CloneNotSupportedException
  • public String toString()
  • public final native void notify()
  • public final native void notifyAll()
  • public final native void wait(long timeout) throws InterruptedException
  • public final void wait(long timeout, int nanos) throws InterruptedException
  • public final void wait() throws InterruptedException
  • protected void finalize() throws Throwable

  • Правила переопределения метода Object. equals().
  1. Используйте оператор == что бы проверить ссылку на объект, переданную в метод equals. Если ссылки совпадают — вернуть true. Это не обязательно, нужно скорее для оптимизации, но может сэкономить время в случае «тяжёлых» сравнений.
  2. Используйте оператор instanceof для проверки типа аргумента. Если типы не совпадают, вернуть false. 
  3. Преобразуйте аргумент к корректному типу. Так как на предыдущем шаге мы выполнили проверку, преобразование корректно.
  4. Пройтись по всем значимым полям объектов и сравнить их друг с другом. Если все поля равны — вернуть true. Для сравнения простых типов использовать ==. Для полей со ссылкой на объекты использовать equals. float преобразовывать в int  с помощью Float.floatToIntBits и сравнить с помощью ==. double преобразовывать в long  с помощью Double.doubleToLongBits и сравнить с помощью ==. Для коллекций вышеперечисленные правила применяются к каждому элементу коллекции. Нужно учитывать возможность null полей/объектов. Очерёдность сравнения полей может существенно влиять на производительность.
  5. Закончив реализацию equals задайте себе вопрос, является ли метод симметричным, транзитивным и непротиворечивым.

И ещё несколько дополнительных правил.

  • Переопределив equals, всегда переопределять hashCode.
  • Не использовать сложную семантику в equals (типа определения синонимов). equals должен сравнивать поля объектов, не более.

  • Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?

Метод equals() обозначает отношение эквивалентности объектов. Эквивалентным называется отношение, которое является симметричным, транзитивным и рефлексивным.

  • Рефлексивность: для любого ненулевого x, x.equals(x) вернет true;
  • Транзитивность: для любого ненулевого x, y и z, если x.equals(y) и y.eqals(z) вернет true, тогда и x.equals(z) вернет true;
  • Симметричность: для любого ненулевого x и y, x. equals(y) должно вернуть true, тогда и только тогда, когда y.equals(x) вернет true.

Также для любого ненулевого x, x.equals(null) должно вернуть false.

  • Какая связь между hashCode и equals?

Объекты равны, когда a.equals(b)=true и a.hashCode==b.hashcode ->true Но необязательно, чтобы два различных объекта возвращали различные хэш коды(такая ситуация называется коллизией).

  • Каким образом реализованы методы hashCode и equals в классе Object?

Реализация метода equals в классе Object сводится к проверке на равенство двух ссылок:

Реализация же метода hashCode класса Object сделана нативной, т.е. определенной не с помощью Java-кода:

Он обычно возвращает адрес объекта в памяти.

  • Что будет, если переопределить equals не переопределяя hashCode? Какие могут возникнуть проблемы?

Они будут неправильно хранится в контейнерах, использующих хэш коды, таких как HashMap, HashSet.

Например HashSet хранит элементы в случайном (на первый взгляд) порядке. Дело в том, что для быстрого поиска HashSet расчитывает для каждлого элемента hashCode и именно по этому ключу ищет и упорядочивает элементы внутри себя

  • Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode?

Есть. Необходимо использовать уникальные, лучше примитивные поля, такие как id, uuid, например. Причем, если эти поля задействованы при вычислении hashCode, то нужно их задействовать при выполнении equals.

Общий совет: выбирать поля, которые с большой долью вероятности будут различаться.

  • Для чего нужен метод hashCode()?

Существуют коллекции(HashMap, HashSet), которые используют хэш код, как основу при работе с объектами. А если хэш для равных объектов будет разным, то в HashMap будут два равных значения, что является ошибкой. Поэтому необходимо соответствующим образом переопределить метод hashCode().

Х   Хеширование — преобразование входного массива данных произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называются хеш-функциями или функциями свёртки, а их результаты называют хешем или хеш-кодом.

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

Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Получающееся хеш-значение i = hash(key) играет роль индекса в массиве H. Затем выполняемая операция (добавление, удаление или поиск) перенаправляется объекту, который хранится в соответствующей ячейке массива H[i].

Одним из методов построения хеш-функции есть метод деления с остатком (division method) состоит в том, что ключу k ставится в соответствие остаток от деления k на m, где m — число возможных хеш-значений.

  • Правила переопределения метода Object.hashCode().

При реализации hashCode используется несколько простых правил. Прежде всего, при вычислении хеш-кода следует использовать те же поля, которые сравниваются в equals. Это, во-первых, даст равенство хеш-кодов для равных обектов, во-вторых, распределено полученное значение будет точно так же, как и исходные данные. Теоретически, можно сделать так, чтобы хеш-код всегда был равен 0, и это будет абсолютно легальная реализация. Другое дело, что ее ценность будет равна тому же самому нулю.

Далее. Несмотря на то, что хеш-коды равных объектов должны быть равны, обратное неверно! Два неравных объекта могут иметь равные хеш-коды. Решающее значение имеет не уникальность, а скорость вычисления, потому как это приходится делать очень часто. Потому, в некоторых случаях имеет смысл посчитать хеш-код заранее и просто выдавать его по запросу. Прежде всего это стоит делать тогда, когда вычисление трудоемко, а объект неизменен.

  • Расскажите про клонирование объектов. В чем отличие между поверхностным и глубоким клонированием?

Чтобы объект можно было клонировать, он должен реализовать интерфейс Cloneable(маркер). Использование этого интерфейса влияет на поведение метода «clone» класс Object. Таким образом 

myObj.clone() создаст нам клон нашего объекта, но этот клон будет поверхностный.

Что значит поверхностным? Это значит что клонируется только примитивные поля класса, ссылочные поля не клонируются!

Для того, чтоб произвести глубокое клонирование, необходимо в клонируемом классе переопределить метод clone() и в нем произвести клонирование изменяемых полей объекта.

  • Правила переопределения метода Object.clone().

Метод clone() в Java используется для клонирования объектов. Т.к. Java работает с объектами с помощью ссылок, то простым присваиванием тут не обойдешься, ибо в таком случае копируется лишь адрес, и мы получим две ссылки на один и тот же объект, а это не то, что нам нужно. Механизм копирования обеспечивает метод clone() класса Object.

 clone() действует как конструктор копирования. Обычно он вызывает метод clone() суперкласса и т.д. пока не дойдет до Object.

 Метод clone() класса Object создает и возвращает копию объекта с такими же значениями полей. Object.clone() кидает исключение CloneNotSupportedException если вы пытаетесь клонировать объект не реализующий интерфейс Cloneable. Реализация по умолчанию метода Object.clone() выполняет неполное/поверхностное (shallow) копирование. Если вам нужно полное/глубокое (deep) копирование класса то в методе clone() этого класса, после получения клона суперкласса, необходимо скопировать нужные поля.

 Синтаксис вызова clone() следующий:

 или чаще:

 Один из недостатков метода clone(), это тот факт, что возвращается тип Object, поэтому требуется нисходящее преобразование типа. Однако начиная с версии Java 1. 5 при переопределении метода вы можете сузить возвращаемый тип.

 Пару слов о clone() и final полях.

 Метод clone() несовместим с final полями. Если вы попробуете клонировать final поле компилятор остановит вас. Единственное решение — отказаться от final.

 Ну и пример использования clone():

 Консоль:

 Как видите, изменение объекта a повлекло за собой изменение объекта c, а вот с b всё в порядке.

  • Где и как вы можете использовать  закрытый конструктор?

Например в качестве паттерна Синглетон. В том же классе создается статический метод. Где и создается экземпляр класса, конечно если он уже не создан, тогда он просто возвращается методом.

  • Что такое конструктор по умолчанию?

В Java если нет явным образом опредёленных конструкторов в классе, то компилятор использует конструктор по умолчанию, опредёленный неявным способом, который аналогичен «чистому», конструктору по умолчанию. Конструктор по умолчанию — это довольно простая конструкция, которая сводится к созданию для типа конструктора без параметров. Так, например, если при объявлении нестатического класса не объявить пользовательский конструктор (не важно, с параметрами или без них), то компилятор самостоятельно сгенерирует конструктор без параметров. Некоторые программисты явным образом задают конструктор по умолчанию по привычке, чтобы не забыть в дальнейшем, но это не обязательно

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

  • Опишите метод Object.finalize().

Метод finalize(). Java обеспечивает механизм, который является аналогичным использованию деструкторов в С ++, который может использоваться для того, чтобы произвести процесс очистки перед возвращением управления операционной системе.  

Применяя метод finalize(), можно определять специальные действия, которые будут выполняться тогда, когда объект будет использоваться сборщиком мусора. Данный метод вызывается при уничтожении объекта автоматическим сборщиком мусора (garbage collector). В классе Object он ничего не делает, однако в классе-наследнике позволяет описать все действия, необходимые для корректного удаления объекта, такие как закрытие соединений с БД, сетевых соединений, снятие блокировок на файлы и т.д. В обычном режиме напрямую этот метод вызывать не нужно, он отработает автоматически. Если необходимо, можно обратиться к нему явным образом.

Его синтаксис: 

protected void finalize( ) throws Throwable 

Ссылки не являются собранным мусором; только объекты — собранный мусор.

  • Чем отличаются слова final, finally и finalize?

final — Нельзя наследоваться от файнал класса. Нельзя переопределить файнал метод. Нельзя изменить сначение файнал поля.

finally — используется при обработке ошибок, вызывается всегда, даже если произошла ошибка(кроме System. exit(0)). Удобно использовать для освобождения ресурсов.

finalize() — вызывается перед тем как сборщик мусора будет проводить освобождение памяти. Не рекомендуется использовать для освобождения системных ресурсов, так как не известно когда сборщик мусора будет производить свою очистку. Вообще данный метод мало кто использует. Единственно что можно использовать этот метод для закрытия ресурса что должен работать на протяжении всей работы программы и закрываться по ее окончанию. Еще можно использовать метод для защиты от так называемых «дураков», проверять, освобождены ли ресурсы, если нет, то закрыть их.

Java core (часть 3).

Переопределение метода в Java | CodeWithHarry

Введение в Java + Установка Java JDK и IntelliJ IDEA для Java

Базовая структура программы Java: понимание нашей первой программы Hello World на Java

Учебное пособие по Java: переменные и типы данных в программировании на Java

Учебное пособие по Java: Java

Учебное пособие по Java: Получение пользовательского ввода в Java

Упражнение по программированию на Java 1: Калькулятор процентного соотношения платы CBSE

Учебное пособие по Java: Глава 1 — Практический набор | Проблемы с практикой Java с решением

Учебное пособие по Java. Операторы, типы операторов и выражения в Java

Учебное пособие по Java. Ассоциативность операторов в Java

Учебное пособие по Java. Тип данных выражений и операторы увеличения/уменьшения

Учебное пособие по Java.

Учебное пособие по Java: Глава 2. Практический набор (вопросы по практике Java)

Учебное пособие по Java: Введение в строки

Учебное пособие по Java: Строковые методы в Java

Практические вопросы по Java по строкам: Практический набор по строкам Java (необходимо решить!)

Условные операторы Java: Оператор If-else в Java

Учебное пособие по Java: Реляционные и логические операторы в Java

Учебное пособие по Java: Операторы Switch Case в Java

Учебное пособие по Java: Практические вопросы по условным операторам и Switch Case

Упражнение по программированию на Java 2 : Rock, Paper Scissors Game в Java

Учебное пособие по Java: циклы While в Java

Учебное пособие по Java: цикл do-while в Java

Учебное пособие по Java: цикл for в Java

Учебное пособие по Java: прерывание и продолжение в Java

Учебное пособие по Java: Практические вопросы по циклам

Учебное пособие по Java: Введение в массивы

Учебное пособие по Java: Для каждого цикла в Java

Учебное пособие по Java: Многомерные массивы в Java Практические вопросы по массивам в Java

Как сделать так, чтобы IntelliJ IDEA выглядела потрясающе!

Учебное пособие по Java. Методы в Java

Учебное пособие по Java. Перегрузка методов в Java

Учебное пособие по Java. Переменные аргументы (VarArgs) в Java

Учебник по Java. Рекурсия в Java

Учебник по Java. Практические вопросы по методам Java

Учебник по Java. Введение в объектно-ориентированное программирование

Учебник по Java.

Учебное пособие по Java. Основные вопросы по объектно-ориентированному программированию

Учебное пособие по Java. Модификаторы доступа, геттеры и сеттеры в Java

Учебное пособие по Java. Упражнение 2. Решение и комментарии

Учебное пособие по Java. Конструкторы в Java

Упражнение по Java 3. Угадай число (версия OOPs)

Учебное пособие по Java. Упражнение по модификаторам доступа и конструкторам

Наследование в Java

Наследование конструкторов в Java

this и ключевое слово super в Java

Переопределение метода в Java

Динамическая отправка методов в Java

Учебное пособие по Java: Упражнение 3 — Решения и комментарии

Учебное пособие по Java: Упражнение 4 — Онлайн-библиотека

Учебник по Java: Упражнения и практические вопросы по наследованию

Учебник по Java: Абстрактные классы и абстрактные методы

Учебник по Java: Введение в интерфейсы

Учебник по Java: Абстрактные классы и интерфейсы

Почему множественное наследование не поддерживается в Java?

Пример интерфейса Java и методы по умолчанию

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

Учебник по Java: Полиморфизм в интерфейсах

Практика Java Вопросы по абстрактным классам и интерфейсам

Java-упражнение 4: решение и приветствие!

Интерпретируемые и компилируемые языки!

Java интерпретируется или компилируется?

Пакеты в Java

Учебное пособие по Java. Создание пакетов в Java

Модификаторы доступа в Java

Практический набор по пакету Java и модификаторам доступа

Упражнение 5 по Java. Создание пользовательского пакета

Многопоточность в Java Создание потока путем расширения класса Thread

Создание потока Java с использованием интерфейса Runnable

Жизненный цикл потока Java

Конструкторы из класса Thread в Java

Приоритеты потока Java

Методы потока Java

Учебник по Java: практические вопросы по потоку

Упражнение 5: Решение и приветствие!

Ошибки и исключения в Java

Синтаксические ошибки, ошибки времени выполнения и логические ошибки в Java (демонстрация)

Исключения и блок Try-Catch в Java

Обработка определенных исключений в Java

Вложенный Try-Catch в Java

Класс Exception в Java

Throw vs Throws в Java

Наконец блок в Java и зачем он нужен!

Практический набор по ошибкам и исключениям

Java-упражнение 6: Пользовательский калькулятор | Практический вопрос по Java

Java Collections Framework

Иерархия коллекций в Java

Как правильно просматривать документацию по Java

ArrayList в Java: демонстрация и методы

LinkedList в Java: демонстрация и методы

ArrayDeque в Java

Хеширование в Java

HashSet в Java

Дата и время в Java

Класс Date в Java

Класс Calendar в Java

GregoriantimeCalendar class java2

API TimeZone в java — Классы и методы

DateTimeFormatter в Java

Advanced Java Practice Set

Java Упражнение 6: Решение | Пользовательский калькулятор

Java Упражнение 7: Система управления библиотекой в ​​Java

Создание наших собственных Javadocs для нашего пакета

Javadocs: теги для документирования классов

Javadocs: Методы для генерации документации Java

Annotation

Advanced Java 2 — практический набор

Упражнение 7. N» data-primary_windows=»Alt+Insert» data-secondary_sublime_text_macos=»⌘ N» data-primary_sublime_text=»Alt+Insert» data-primary_xwin=»Alt+Insert» data-primary_eclipse=»Alt+Insert»>» Alt+Insert и выбрать «Переопределить методы».

  • Выберите методы для переопределения (удерживайте клавишу Shift или Ctrl для выполнения множественного выбора). В список не включены методы, которые уже переопределены или к которым нет доступа из текущего подкласса.

    При необходимости установите флажок Копировать JavaDoc, чтобы вставить комментарии JavaDoc для переопределенных методов.

    При необходимости установите флажок Вставить @Override, чтобы вставить аннотацию @Override .

  • Нажмите OK и укажите исходный код тела метода.

    Наведите указатель мыши на значок в поле, чтобы просмотреть имя базового класса. Щелкните ее, чтобы открыть объявление переопределенного метода.