Szukaj…


Wprowadzenie

Polimorfizm jest jedną z podstawowych koncepcji OOP (Object Oriented Programming) . Główną ideą polimorfizmu jest to, że obiekt może przyjmować różne formy. Aby to osiągnąć (polimorfizm), mamy dwa główne podejścia.

  1. Przeciążenie metody

    • Występuje, gdy istnieją dwie lub więcej metod o tej samej nazwie i różnych parametrach wejściowych. Typ zwracany powinien być taki sam dla wszystkich metod o tej samej nazwie
  2. Przesłanianie metody

    • Występuje, gdy obiekt podrzędny używa tej samej definicji metody (ta sama nazwa z tymi samymi parametrami), ale ma różne implementacje.

Korzystając z tych dwóch podejść, możemy zastosować tę samą metodę / funkcję, aby zachowywać się inaczej. Zobaczmy więcej szczegółów na ten temat w poniższych przykładach.

Przeciążenie metody

Przeciążanie metod to sposób na wykorzystanie polimorfizmu w klasie. Możemy mieć dwie lub więcej metod w tej samej klasie, z różnymi parametrami wejściowymi.

Różnica parametrów wejściowych może być:

  • Liczba parametrów
  • Rodzaj parametrów (typ danych)
  • Kolejność parametrów

Spójrzmy na nie osobno (te przykłady w Javie, ponieważ jestem bardziej zaznajomiony z tym - przepraszam za to):

  1. Liczba parametrów

     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);
         }
     }
    

    Przyjrzyj się uważnie, widać, że typ zwracany przez metodę jest taki sam - int , ale liczba tych metod ma różną liczbę danych wejściowych. Nazywa się to metodą ładowania z różną liczbą parametrów.

    PS: To tylko przykład , nie ma potrzeby definiowania takich funkcji dodawania.

  1. Rodzaj parametrów

    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);
        }
    }
    

    Zauważ, że każda metoda ma tę samą nazwę i ten sam typ zwrotu, podczas gdy mają różne typy danych wejściowych.

    PS: Ten przykład służy wyłącznie do wyjaśnienia celu.

  1. Kolejność parametrów

    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: Ten przykład służy również wyłącznie wyjaśnieniu celu.

Metoda przesłonięcia

Zastępowanie metod to sposób na zastosowanie polimorfizmu między klasami. jeśli jedna klasa zostanie odziedziczona od drugiej, pierwsza (podklasa) może zastąpić metody drugiej (superklasy) i zmienić implementację.

jest to stosowane tam, gdzie superklasa definiuje bardziej ogólną implementację metody, podczas gdy podklasa używa bardziej specyficznej.

Rozważ następujący przykład:

Mamy klasę dla ssaków:

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

Następnie mamy klasę dla psa, czyli ssaka:

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

W tym przykładzie definiujemy whoIam() w klasie Mammal , gdzie ssak mówi, że jest to Mammal. Ale to jest ogólny termin, ponieważ istnieje wiele ssaków. Następnie możemy odziedziczyć klasę Dog od klasy Mammal , ponieważ pies jest ssakiem. Mówiąc ściślej, Pies to zarówno Pies, jak i Ssak. Dlatego pies powinien powiedzieć I am a Mammal a także I am a Dog . Stąd możemy Zastąpić whoIam() metoda w klasie Super ( Mammal klasy, to znaczy) z klasy sub (The Dog klasy).

Możemy również wywołać metodę super.whoIam() za pomocą super.whoIam() w Javie. Wtedy Dog będzie się zachowywał jak Pies, a jednocześnie zachowa się jak Ssak.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow