Поиск…


Вступление

Полиморфизм является одним из основных понятий ООП (объектно-ориентированное программирование) . Основная идея полиморфизма заключается в том, что объект имеет возможность принимать разные формы. Для достижения этого (полиморфизма) мы имеем два основных подхода.

  1. Перегрузка метода

    • Происходит при наличии двух или более методов с тем же именем с разными входными параметрами. Тип возврата должен быть одинаковым для всех методов с тем же именем
  2. Метод переопределения

    • Возникает, когда дочерний объект использует одно и то же определение метода (одно и то же имя с одинаковыми параметрами), но имеет разные реализации.

Используя эти два подхода, мы можем использовать один и тот же метод / функцию, чтобы вести себя по-разному. Давайте посмотрим подробнее об этом в следующих примерах.

Перегрузка метода

Перегрузка метода - это способ использования полиморфизма внутри класса. Мы можем иметь два или более метода внутри одного класса с разными входными параметрами.

Разница входных параметров может быть:

  • Количество параметров
  • Тип параметров (Тип данных)
  • Порядок параметров

Давайте посмотрим на них отдельно (эти примеры в java, поскольку я более знаком с ним - Извините за это):

  1. Количество параметров

     public class Mathematics { 
         public int add (int a, int b) {
             return (a + b);
         }
    
         public int add (int a, int b, int c) {
             return (a + b + c); 
         }
    
         public int add (int a, int b, int c, int c) {
             return (a + b + c + d);
         }
     }
    

    Посмотрите внимательно, вы можете видеть, что тип возврата метода тот же - int , но эти методы имеют разное количество входов. Это называется методом загрузки с различным количеством параметров.

    PS: Это просто пример , нет необходимости определять функции добавления, подобные этому.

  1. Тип параметров

    public class Mathematics { 
        public void display (int a) {
            System.out.println("" + a);
        }
    
        public void display (double a) {
            System.out.println("" + a);
        }
    
        public void display (float a) {
            System.out.println("" + a);
        }
    }
    

    Обратите внимание, что каждый метод имеет одно и то же имя и тот же тип возврата, в то время как у них разные типы входных данных.

    PS: Этот пример предназначен только для объяснения цели.

  1. Порядок параметров

    public class Mathematics {
        public void display (int a, double b) {
            System.out.println("Numbers are " + a + " and " + b);
        }
    
        public void display (double a, int b) {
            System.out.println("Numbers are " + a + " and " + b);
        }
    }
    

    PS: Этот пример также объясняет цель.

Переопределение метода

Метод переопределения - это способ использования полиморфизма между классами. если один класс наследуется от другого, первый (подкласс) может переопределять методы последнего (суперкласса) и изменять реализацию.

это используется там, где суперкласс определяет более общую реализацию метода, тогда как подкласс использует более конкретный.

Рассмотрим следующий пример:

У нас есть класс для млекопитающих:

class Mammal {
  void whoIam () {
    System.out.println("I am a Mammal");
  }
}

Тогда у нас есть класс для собаки, которая является млекопитающим:

class Dog extends Mammal {
  @Override
  void whoIam () {
    super.whoIam();
    System.out.println("I am a Dog!");
  }
}

В этом примере мы определяем whoIam() в классе Mammal , где млекопитающее говорит, что это млекопитающее. Но это общий термин, так как там много млекопитающих. Затем мы можем наследовать класс Dog из класса Mammal , так как Dog является млекопитающим. Но, если быть более конкретным, Собака - Собака, а также Млекопитающее. Следовательно, собака должна сказать: « I am a Mammal а также I am a Dog . Следовательно, мы можем переопределить метод whoIam() в суперклассе (класс Mammal , то есть) из подкласса (класс Dog ).

Мы также можем назвать метод суперкласса, используя super.whoIam() в Java. Затем Dog будет вести себя как Собака, а также вести себя как млекопитающее.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow