В чем разница между перегрузкой метода и его переопределением в Java?
Есть ли разница в сигнатуре метода, спецификаторе доступа, типе возврата и т. Д.?
java
object-oriented
user63948
источник
источник
Ответы:
Чтобы перегрузить метод новым методом, новый метод должен иметь другую подпись. Т.е. два перегруженных метода имеют одно и то же имя, но разные параметры. Вот пример двух перегруженных методов:
На основе типов параметров будет вызван соответствующий метод. Обратите внимание, что изменение типа возврата недостаточно (хотя вы можете сделать это дополнительно).
Когда метод переопределяется, новый метод имеет ту же сигнатуру и в некоторых случаях заменяет переопределенный метод. Вот пример переопределенного метода:
Выбор сделан на основе типа объекта. Например,
будет называть
someMethod
изB
. Вы можете (и должны) добавить аннотацию @Override:Теперь, если вы случайно измените параметры в B, компилятор сообщит вам, что вы не переопределяете someMethod (), а перегружаете его.
источник
Перегрузка, методы имеют одинаковое имя, но разные параметры.
Переопределение, реализация, данная в базовом классе, заменяется на реализацию в подклассе.
источник
Концепции, о которых вы спрашиваете, описаны в руководствах по Java.
Объяснение для переопределения дается следующим образом:
Перегрузка объясняется в руководстве следующим образом:
В приведенном выше объяснении перегрузки упоминаются квалификации, обсуждаемые в уроке под названием «Интерфейсы и наследование» :
источник
Перегрузка метода обычно определяется как «предоставление нескольких доступных методов с одинаковыми именами, различающимися по количеству и типу входов и выходов». Концепция обычно заключается в том, что вы хотите иметь возможность выполнять одну и ту же базовую операцию с учетом различных наборов входных данных: например, вы можете «добавить» любые два значения числового типа, однако обычно важно знать, какой именно тип значение таково, что вы можете использовать преимущества или планировать конкретные действия такого типа. Таким образом, вы должны определить метод для каждой комбинации числовых типов (и / или коллекций), которые вы хотите поддерживать. Все эти методы имеют одинаковые имена, но разные «подписи»; во время компиляции,
Переопределение метода обычно определяется как «обеспечение другой реализации в производном классе метода с определенной сигнатурой, определенной в базовом классе». Есть много причин переопределить метод; практически все они имеют общий факт, что у производного класса есть дополнительные знания о том, что должно быть сделано, что не может знать базовый класс. Существует два вида переопределения в большинстве ОО-языков; переопределение может заменить метод базового класса или может расширитьметод базового класса. Различие состоит в том, что производный класс, который расширяет реализацию базового класса, будет вызывать переопределенную версию метода базового класса в некоторый момент во время выполнения переопределяющего метода. Это позволяет переопределяющим классам «повторно использовать» общие области операции, которые содержатся в базовом классе.
источник