002 Java Oop Method Overloading Polymorphism

Перегрузка методов (Method Overloading) #

В Java несколько методов из одного класса могут иметь одно название.

Одно название и несколько методов #

Давайте сразу рассмотрим пример.

public class Calculator {
    public static int addition(int a, int b) {
        return a + b;
    }

    public static double addition(double a, double b) {
        return a + b;
    }
}

Очевидное-невероятное, но Java сама выбирает подходящий метод, для решения проблемы.Если мы передадим ей два int, то выберется первый метод, если два double, то JDK выберет самостоятельно нижний метод.

Мы можем создать метод с двумя long или с двумя String.

    public static double addition(String a, String b) {
        return a + b;
    }

Каждый раз сигнатура метода будет меняться и Java выбирает подходящий.

Сигнатура метода #

Сигнатура метода - это название метода и принимаемые им параметры. У метода выше сигнатурой называется addition(int a, int b). При изменении параметров меняется и сигнатура.

Количество принимаемых атрибутов #

Мы можем менять не только типы “переменных”, но и их количество.

В наш класс Calculator мы можем добавить новые методы:

public class Calculator {
    public static int addition(int a, int b) {
        return a + b;
    }

    public static double addition(double a, double b) {
        return a + b;
    }

    public static double addition(String a, String b) {
        return a + b;
    }
    public static int addition(int a, int b, int c) {
        return a + b;
    }

    public static double addition(double a, double b, double c) {
        return a + b;
    }

    public static double addition(String a, String b, String c) {
        return a + b;
    }
}

Сигнатура не должна повторяться. Java видит название метода и шесть разных вариантов переменных:

  1. Два инта
  2. Три инта
  3. Два double
  4. Три double
  5. Два String
  6. Три String

Вполне возможно передать один String и один int. Но это можно сделать лишь единожды. Сигнатура каждый раз должна отличаться.

Перегрузка методов позволяет прописать свои свойства даже для простого сложения. В главе, в которой мы знакомились с Assert мы прописывали максимальное значение Integer. С помощью перегрузки мы должны прописать правильный и корректный метод для каждого типа данных. Возможно и для Vararg понадобится свой метод.

Перегрузка важная часть полиморфизма, в объектно ориентированном программировании.

Забегая вперёд в Java три важные части или даже ноги, на которых она стоит.

Три ноги на которых стоит Java #

  1. Наследование - inheritance.Наследование, extends

  2. Инкапсуляция - encapsulation.

  3. Полиморфизм - polymorphism.

    • перегрузка - overloading.
    • overriding

Полиморфизм #

Здесь могло бы стоять определение. Но это очень обширная тема, проходящая через всё ООП. По этому пока просто запомните, что перегрузка входит в определение полиморфизма.