Разница между перегрузкой, наследованием, переопределением и полиморфизмом:
1) Наследование — это когда подкласс получает члены родительского класса.
2) Переопределение — это метод переопределения родительского класса после наследования.
3) Перегрузка — это серия методов с разными параметрами и одинаковым именем в классе.
4) Полиморфизм — это избежание большого количества перегрузок в родительском классе, что приведет к раздутию кода и сложности его сопровождения.
Интересное утверждение, которое я видел в Интернете: наследование — это метод, позволяющий подклассу использовать родительский класс, а полиморфизм — это метод, позволяющий родительскому классу использовать подкласс.
Следующие примеры включают эти четыре реализации:
класс Triangle расширяет форму {
public int getSides() {
возврат 3;
}
}
класс Rectangle расширяет форму {
public int getSides (int i) {
вернуть я;
}
}
публичный класс Shape {
общедоступное логическое значение isSharp(){
вернуть истину;
}
общественный ИНТ getSides () {
вернуть 0;
}
public int getSides(Triangle tri){
возврат 3;
}
public int getSides (Rectangle Rec) {
возврат 4;
}
public static void main(String[] args) {
Треугольник три = новый треугольник();
System.out.println(«Треугольник — это острый тип?» + tri.isSharp());
Форма фигуры = новый треугольник();
System.out.println(“Моя фигура имеет ” + shape.getSides() + ” стороны.”);
}
}
Красный — перегрузка, зеленый — перезапись, синий — наследование, розовый — полиморфизм.
Обратите внимание, что методы класса Triangle переопределяются, а методы класса Rectangle перегружаются.
Сравнивая красную и розовую части, можно обнаружить преимущества полиморфизма перед перегрузкой: если вы используете перегрузку, метод получения количества ребер должен быть перегружен в родительском классе для каждого подкласса, если вы используете полиморфизм, то родительский класс; предоставляет лишь интерфейс для получения количества сторон. Что касается получения количества сторон какой формы и способа его получения, то они реализованы (переписаны) в подклассах соответственно.