Перегрузка метода просто означает предоставление двух отдельных методов в классе с одним и тем же именем, но разными аргументами, в то время как тип возвращаемого значения метода может отличаться или не отличаться, что позволяет нам повторно использовать одно и то же имя метода.
Но оба метода различны, поэтому могут быть разрешены компилятором во время компиляции, поэтому он также известен как Полиморфизм времени компиляции или Статический полиморфизм
Переопределение метода означает определение метода в дочернем классе, который уже определен в родительском классе с такой же сигнатурой метода, т.е. с тем же именем, аргументами и типом возврата.
Mammal mammal = new Cat();
System.out.println(mammal.speak());
В строке mammal.speak()
компилятор сообщает, что вызывается метод speak()
ссылочного типа Mammal
, поэтому для компилятора этот вызов Mammal.speak()
.
Но во время выполнения JVM ясно знает, что ссылка mammal
содержит ссылку на объект Cat
, поэтому для JVM этот вызов Cat.speak()
.
Поскольку вызов метода разрешается во время выполнения JVM, поэтому он также известен как Полиморфизм времени выполнения и Диспетчеризация динамического метода .
Разница между перегрузкой метода и переопределением метода
Для получения более подробной информации вы можете прочитать Все о перегрузке метода и переопределении метода .