Polimorfizm w Javie: pojęcia, typy, charakterystyka i przykłady

Opublikowany: 2022-04-18

JavaScript jest jednym z najpopularniejszych i najszerzej używanych języków programowania obiektowego, wraz z C#, PHP, Python, C++ itp. Umożliwia użytkownikom prezentowanie i rozwiązywanie rzeczywistych koncepcji poprzez programowanie, ponieważ wszystko jest reprezentowane jako obiekt. Funkcje Java jako języka programowania oferują kilka możliwości uproszczenia tworzenia oprogramowania poprzez uczynienie kodu bardziej dynamicznym i łatwiejszą konserwację.

W tym artykule przyjrzymy się Javie jako językowi programowania obiektowego i zrozumiemy koncepcje dziedziczenia, abstrakcji, polimorfizmu i enkapsulacji danych. Przyjrzymy się również rodzajom polimorfizmu w Javie, ich zaletom i wadom.

Spis treści

Przegląd programowania obiektowego

Języki programowania obiektowego (OOP) odnoszą się do tych języków komputerowych, które wykorzystują w kodowaniu koncepcję „obiektów” czasu rzeczywistego. Ma na celu implementację światowych bytów, takich jak dziedziczenie, polimorfizm, pętle, abstrakcja danych itp., poprzez programowanie.

Istnieje kilka podstawowych koncepcji programowania obiektowego, z którymi programiści muszą się zapoznać. Te terminy koncepcyjne są niezbędne do poznania specjalnych i unikalnych cech OOP, takich jak enkapsulacja, polimorfizm itp.

1. Klasa

„Klasa” reprezentuje zestaw właściwości i metod, które mają zastosowanie do wszystkich określonych „obiektów” w klasie. Obiekty mogą być różnego typu, takie jak liczba całkowita, tablica lub łańcuch itp. Klasa jest jak prototyp zdefiniowany przez użytkownika, za pomocą którego można tworzyć różne „obiekty”.

2. Przedmiot

Obiekt jest najbardziej podstawową jednostką języków OOP, reprezentującą rzeczywiste dane w prawdziwym życiu. Obiekty posiadają właściwości klas, w których są wywoływane.

3. Metoda

Metoda to zestaw instrukcji obejmujących różne funkcje, które są łączone w celu wykonania określonego zadania. Zwraca dane wyjściowe po wykonaniu instrukcji zdefiniowanych przez użytkownika. Może również wykonywać zadania, które nie przynoszą żadnych wyników. Metody pozwalają programistom na ponowne wykorzystanie kodów bez ich ponownego wpisywania. Java wymaga, aby wszystkie metody należały do ​​klasy, w przeciwieństwie do języków takich jak C++, C czy Python.

Koncepcje OOP

Istnieją cztery podstawowe zasady programowania obiektowego – Java wykazuje wszystkie te właściwości:

1. Abstrakcja

Abstrakcja danych to właściwość języków OOP, która prezentuje niezbędne szczegóły, jednocześnie utrzymując inne nieistotne szczegóły obiektu przed widocznością dla użytkownika, takie jak kod implementacji. Ta funkcja wyświetla tylko niezbędne i istotne szczegóły, co pomaga programistom szybko wprowadzać odpowiednie zmiany w funkcjonalności klasy.

2. Hermetyzacja

Enkapsulacja danych odnosi się do pakowania danych w jednostki. Ta właściwość języków OOP chroni enkapsulowane dane przed innymi funkcjami i metodami. Wiąże ze sobą kod i określone metody w celu wykonywania operacji w pojedynczych jednostkach, zapobiegając w ten sposób manipulowaniu nimi lub dostępowi do nich za pomocą metod zewnętrznych. Jest to również znane jako ukrywanie danych.

3. Dziedziczenie

Dziedziczenie to kolejna ważna cecha języków OOP, która pozwala klasie dziedziczyć właściwości z innych klas. Działa w oparciu o koncepcję ponownego użycia kodów, zmniejszając w ten sposób potrzebę wielokrotnego przepisywania funkcji klasy. Klasa, która dziedziczy z innej klasy, nazywana jest podklasą, a dziedziczona klasa nazywana jest nadklasą.

4. Polimorfizm

Polimorfizm pozwala obiektowi przybierać różne formy i wykonywać podobne zadania lub wykazywać podobne zachowania w różnych metodach.

Polimorfizm w Javie

Polimorfizm pozwala na wykonanie pojedynczego zadania na różne sposoby. Jest to właściwość, która pomaga identyfikować i rozróżniać podobne jednostki kodu, zwiększając w ten sposób wydajność języków OOP.

W Javie polimorfizm przejawia się poprzez zadeklarowanie obiektów jako oddzielnych bytów. W ten sposób tę samą czynność można wykonać na wiele sposobów. Polimorfizm jest aktywowany wraz z dziedziczeniem, umożliwiając obiektom wykonywanie różnych zadań przy użyciu dziedziczonych właściwości różnych klas. Różnice w oznaczeniu metod lub obiektów rozróżniają dwie jednostki.

Ucz się kursów rozwoju oprogramowania online z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Charakterystyka polimorfizmu

1. Przymus

Niejawna konwersja typów danych w celu zapobiegania błędom typu w czasie kompilacji to wymuszanie. Nie obejmuje jawnych konwersji typów danych, ale jest zgodny tylko z hierarchią konwersji, na którą zezwala Java. Na przykład, jeśli operand jest pływający, a operator jest liczbą całkowitą, wynik będzie pływający.

2. Parametry/zmienne polimorficzne

Obiekt lub zmienna, która może przechowywać wartości różnych typów w czasie wykonywania, jest znana jako zmienna lub parametr polimorficzny. Oznacza to, że podczas deklarowania klasy te same nazwy zmiennych mogą zawierać różne typy danych, a te same nazwy metod mogą zawierać różne parametry i typy zwracane.

3. Przeciążenie operatora wewnętrznego

Przeciążanie operatora wykorzystuje symbol operatora zgodnie z wymaganiami użytkownika. Java obsługuje przeciążanie operatorów wewnętrznych. Jest to również przykład statycznego polimorfizmu.

Rodzaje polimorfizmu w Javie

W Javie polimorfizm można wywołać za pomocą:

1. Przeciążenie metody

Przeciążanie metod to proces tworzenia wielu obiektów lub metod o tej samej nazwie i należących do tej samej klasy. Działa w ramach klasy.

2. Nadpisywanie metody

Zastępowanie metod polega na tym, że podklasa tworzy te same metody, które zostały zadeklarowane w nadklasie. Funkcjonuje w różnych klasach. Jeśli podklasa zawiera te same metody, które są już obecne w nadklasie, funkcja w podklasie jest zastępowana.

Polimorfizm podtypów w Javie

Polimorfizm podtypu zależy od upcastingu i późnego wiązania.

  • Rzutowanie to proces, w którym obiekt lub metoda może promować typ danych (liczba zmiennoprzecinkowa, liczba całkowita itp.) z podtypu do nadtypu, przesuwając go w górę hierarchii dziedziczenia.
  • Późne wiązanie jest używane do wywoływania metod, które nie są końcowymi instancjami.

Żaden operator nie jest w to zaangażowany, ponieważ sam podtyp jest członkiem nadtypu. Na przykład, jeśli klasa nosi nazwę kolory, jej podtypy mogą być czerwone, niebieskie, pomarańczowe, zielone itd. Polimorfizm podtypów obejmuje podtypy wykazujące właściwości nadtypu. Jednak dostęp do indywidualnych właściwości każdego podtypu zostaje utracony.

Polimorfizm środowiska uruchomieniowego w Javie

W Javie polimorfizm środowiska wykonawczego jest również znany jako Dynamic Method Dispatch lub Dynamic Binding. Osiąga się to poprzez przesłonięcie metody — wywołanie nadpisanej metody w celu zapewnienia dynamicznego rozwiązania w czasie wykonywania. Można to osiągnąć za pomocą funkcji, a nie przedmiotów.

Oto przykład polimorfizmu środowiska uruchomieniowego w Javie:

klasa samochodu{

void run(){System.out.println("jazda");}

}

klasa Volkswagen rozszerza samochód{

void run(){System.out.println("Bezpieczna jazda 90km");}

public static void main(String args[]){

Samochód c = nowy Volkswagen();//upcasting

b.uruchom();

}

}

Wyjście :

Bezpieczna jazda z 90km

Polimorfizm czasu kompilacji w Javie

Polimorfizm w czasie kompilacji jest osiągany przez przeciążanie metody. Jest to proces, w którym wywołanie przeciążonej metody jest wykonywane i rozwiązywane w czasie kompilacji. Znany jest również jako polimorfizm statyczny. Java jest wystarczająco elastyczna, aby umożliwić użytkownikowi korzystanie z metod lub obiektów o tych samych nazwach, o ile jej deklaracje i właściwości podpisu pozostają inne.

Oto przykład polimorfizmu w czasie kompilacji w Javie:

klasa SimpleCalc

{

int dodaj(int x, int y)

{

zwróć x+y;

}

int add(int x, int y, int z)

{

zwróć x+y+z;

}

}

Demo klasy publicznej

{

public static void main(String args[])

{

SimpleCalc obj = nowy SimpleCalc();

System.out.println(obj.add(20, 30));

System.out.println(obj.add(40, 30, 20));

}

}

Wyjście :

50

90

Znaczenie polimorfizmu

Polimorfizm umożliwia pisanie metod, które mogą tworzyć różne typy bytów o tej samej nazwie. Polimorfizm jest niezbędny w Javie ze względu na różne zalety użytkowania i zakres, jaki zapewnia, aby kod był dynamiczny:

  1. Pozwala na wielokrotne wykorzystanie kodów – te same kody nie muszą być pisane kilka razy.
  2. Dzięki temu jedna zmienna może wykazywać wiele zachowań – mając tę ​​samą nazwę, ale różne właściwości, może otworzyć pole do zachowania spójności w kodach.
  3. Redukcja kodów zbiorczych – pomaga w debugowaniu, jednocześnie skracając czas kompilacji, oszczędzając pamięć, energię i czas użytkownika.

Możliwe problemy we wdrażaniu polimorfizmu

Polimorfizm może być mylący w użyciu i implementacji. Zmniejsza czytelność kodów, co stwarza zagrożenie wieloma błędami i błędami. Stwarza również problemy z wykonywaniem funkcji zgodnie z wymaganiami.

Jest jeden klasyczny problem, na który należy zwrócić uwagę: problem Fragile Base Class. Odnosi się do niewłaściwego asemblowania i kodowania dziedziczonej klasy, co powoduje, że metody wykazują nieprzewidywalne wyniki.

Wnioski

Delikatny charakter dziedziczenia może prowadzić do dysfunkcyjnych i złamanych kodów, pomimo spełnienia wszystkich innych kryteriów. Ten podstawowy problem architektoniczny jest uważany za problem Fragile Base Class. Dowiedz się więcej o tym, jak Java prezentuje koncepcje OOP, dołączając do programu Executive PG programu w zakresie rozwoju oprogramowania — specjalizacja w rozwoju pełnego stosu . Uzyskaj mentoring od ekspertów branżowych i buduj praktyczną wiedzę, angażując się w praktyczne projekty oparte na współpracy z innymi użytkownikami.

Zarezerwuj miejsce już dziś!

Co to jest wiązanie statyczne i dynamiczne?

Obiekty określone w czasie kompilacji są nazywane powiązaniem statycznym. Z drugiej strony typy dynamicznego wiązania obiektów są określane w czasie wykonywania. Pierwszy jest używany podczas przeciążania metody, a drugi podczas nadpisywania metody.

Jakie są dwie podstawowe różnice między nadpisywaniem metody a przeciążaniem metody?

W Javie przesłanianie metod nie przesłania metod statycznych, prywatnych i końcowych, podczas gdy przeciążanie metod przeciąża metody statyczne, prywatne i końcowe w Javie. Również przesłanianie metod podmiotów do wiązania dynamicznego i, z drugiej strony, metody przeciążone przechodzą przez wiązanie statyczne.

Jakie są różnice między polimorfizmem a dziedziczeniem w Javie?

W Javie istnieje kilka punktów różnicy między polimorfizmem a dziedziczeniem:

1. Dziedziczenie jest reprezentacją rzeczywistej relacji rodzic-dziecko w kodowaniu. Ale polimorfizm jest katalizatorem, który wykorzystuje tę relację, aby uczynić program bardziej dynamicznym.
2. Dziedziczenie umożliwia ponowne wykorzystanie kodów z klasy potomnej poprzez dziedziczenie tego samego z klasy nadrzędnej. Natomiast polimorfizm pozwala klasie potomnej ponownie zdefiniować swoje istniejące zachowanie wewnątrz klasy nadrzędnej.