В чем разница между перегрузкой метода и переопределением метода? Может ли кто-нибудь объяснить это на примере?
В чем разница между перегрузкой и переопределением метода?
Ответ 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, и он вызывается другой версией метода.