В чем разница между перегрузкой метода и переопределением метода? Может ли кто-нибудь объяснить это на примере?
В чем разница между перегрузкой и переопределением метода?
Ответ 1
Метод перегрузка имеет дело с понятием наличия двух или более методов в одном классе с тем же именем, но с разными аргументами.
void foo(int a)
void foo(int a, float b)
Метод переопределение означает наличие двух методов с теми же аргументами, но с различными реализациями. Один из них будет существовать в родительском классе, а другой - в производном или дочернем классе. Аннотация @Override
, хотя и не обязательная, может помочь обеспечить надлежащее переопределение метода во время компиляции.
class Parent {
void foo(double d) {
// do something
}
}
class Child extends Parent {
@Override
void foo(double d){
// this method is overridden.
}
}
Ответ 2
Переопределение метода - это когда дочерний класс переопределяет тот же метод, что и родительский класс, с теми же параметрами. Например, стандартный Java-класс java.util.LinkedHashSet
расширяет java.util.HashSet
. Метод add()
переопределяется в LinkedHashSet
. Если у вас есть переменная типа HashSet
, и вы вызываете ее метод add()
, она будет вызывать соответствующую реализацию add()
, исходя из того, является ли она HashSet
или LinkedHashSet
. Это называется полиморфизмом.
Перегрузка метода определяет несколько методов в одном классе, которые принимают разные числа и типы параметров. В этом случае фактический вызванный метод определяется во время компиляции на основе количества и типов аргументов. Например, метод System.out.println()
перегружен, так что вы можете передавать ints и Strings, и он вызывается другой версией метода.