Статьи

Краткое руководство по полиморфизму в Java

Слово «полиморфизм» буквально означает «состояние множества форм» или «способность принимать разные формы». Применительно к объектно-ориентированным языкам программирования, таким как Java, он описывает способность языка обрабатывать объекты различных типов и классов через единый унифицированный интерфейс.

Полиморфизм в Java имеет два типа: полиморфизм времени компиляции (статическое связывание) и полиморфизм времени выполнения (динамическое связывание). Перегрузка метода является примером статического полиморфизма, а переопределение метода — примером динамического полиморфизма.

Важным примером полиморфизма является то, как родительский класс ссылается на объект дочернего класса. Фактически, любой объект, который удовлетворяет более чем одной взаимосвязи IS-A, является полиморфным по своей природе.

Например, давайте рассмотрим класс AnimalCatAnimal Итак, любой кот — это животное. Здесь CatAnimal

Примечание. Также допустимо говорить, что каждый объект в Java является полиморфным по своей природе, поскольку каждый из них проходит тест IS-A для себя, а также для класса Object

Статический полиморфизм:

В Java статический полиморфизм достигается за счет перегрузки методов. Перегрузка метода означает, что в классе есть несколько методов, имеющих одинаковое имя, но разные типы / порядок / количество параметров.

Во время компиляции Java знает, какой метод вызывать, проверяя сигнатуры метода. Итак, это называется полиморфизмом времени компиляции или статическим связыванием . Концепция будет понятна из следующего примера:

 class DemoOverload{
    public int add(int x, int y){  //method 1
    return x+y;
    }

    public int add(int x, int y, int z){ //method 2
    return x+y+z;
    }

    public int add(double x, int y){ //method 3
    return (int)x+y;
    }

    public int add(int x, double y){ //method 4
    return x+(int)y;
    }
}

class Test{
    public static void main(String[] args){
    DemoOverload demo=new DemoOverload();
    System.out.println(demo.add(2,3));      //method 1 called
    System.out.println(demo.add(2,3,4));    //method 2 called
    System.out.println(demo.add(2,3.4));    //method 4 called
    System.out.println(demo.add(2.5,3));    //method 3 called
    }
}

В приведенном выше примере есть четыре версии методов add Первый метод принимает два параметра, а второй — три. Для третьего и четвертого способов происходит изменение порядка параметров. Компилятор просматривает сигнатуру метода и решает, какой метод вызвать для конкретного вызова метода во время компиляции.

Динамический полиморфизм:

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

Посмотрите на следующий пример.

 class Vehicle{
    public void move(){
    System.out.println(“Vehicles can move!!”);
    }
}

class MotorBike extends Vehicle{
    public void move(){
    System.out.println(“MotorBike can move and accelerate too!!”);
    }
}

class Test{
    public static void main(String[] args){
    Vehicle vh=new MotorBike();
    vh.move();    // prints MotorBike can move and accelerate too!!
    vh=new Vehicle();
    vh.move();    // prints Vehicles can move!!
    }
}

Следует отметить, что при первом вызове метода move()VehicleMotorBike Таким образом, когда выполняется вызов метода move() В этом случае объект относится к классу MotorBike Таким образом, будет вызван метод move()MotorBike Во втором вызове move()Vehicle Итак, будет вызван метод move()Vehicle

Поскольку вызываемый метод определяется во время выполнения, это называется динамическим или поздним связыванием .

Резюме:

Объект в Java, который проходит более одного теста IS-A, имеет полиморфный характер

Каждый объект в Java проходит минимум два теста IS-A: один для себя и один для класса Object

Статический полиморфизм в Java достигается перегрузкой метода

Динамический полиморфизм в Java достигается переопределением метода

Комментарии к этой статье закрыты. У вас есть вопрос о Java? Почему бы не спросить об этом на наших форумах ?