Co to jest polimorfizm, do czego służy i jak się go stosuje?
oop
polymorphism
computer-science
UnkwnTech
źródło
źródło
Odpowiedzi:
Jeśli pomyślisz o greckich korzeniach tego terminu, powinno stać się oczywiste.
Zatem polimorfizm to zdolność (w programowaniu) do przedstawienia tego samego interfejsu dla różnych podstawowych formularzy (typów danych).
Na przykład w wielu językach liczby całkowite i liczby zmiennoprzecinkowe są domyślnie polimorficzne, ponieważ można dodawać, odejmować, pomnażać itd., Niezależnie od tego, że typy są różne. Rzadko uważa się je za przedmioty w zwykłym znaczeniu.
Ale w takim sam sposób, jak klasa
BigDecimal
lubRational
czyImaginary
może również świadczyć te operacje, chociaż działają one na różnych typach danych.Klasycznym przykładem jest
Shape
klasa i wszystkie klasy, które mogą z niej odziedziczyć (kwadrat, koło, dwunastościan, nieregularny wielokąt, ikona itp.).W przypadku polimorfizmu każda z tych klas będzie miała inne podstawowe dane. Kształt punktowy wymaga tylko dwóch współrzędnych (oczywiście przy założeniu, że znajduje się w dwuwymiarowej przestrzeni). Okrąg potrzebuje środka i promienia. Kwadrat lub prostokąt wymaga dwóch współrzędnych dla lewego górnego i prawego dolnego rogu i (ewentualnie) obrotu. Nieregularny wielokąt potrzebuje szeregu linii.
Uczyniwszy klasę odpowiedzialną za kod i dane, można osiągnąć polimorfizm. W tym przykładzie każda klasa miałaby swoją
Draw()
funkcję, a kod klienta mógłby po prostu zrobić:aby uzyskać prawidłowe zachowanie dla dowolnego kształtu.
Jest to w przeciwieństwie do starego sposobu robienia rzeczy, w których kod był oddzielony od danych, a miałbyś takie funkcje jak
drawSquare()
idrawCircle()
.Orientacja obiektu, polimorfizm i dziedziczenie są ściśle powiązanymi pojęciami i należy je znać. Podczas mojej długiej kariery było wiele „srebrnych pocisków”, które właściwie po prostu wygasły, ale paradygmat OO okazał się dobry. Naucz się, rozumiem, uwielbiam - będziesz zadowolony, że to zrobiłeś :-)
(a) Pierwotnie napisałem to jako żart, ale okazało się, że jest poprawne i dlatego nie jest tak śmieszne. Monomeru styrenu stanie być wykonane z węgla i wodoru , a polistyren jest z grupy, że .
C8H8
(C8H8)n
Być może powinienem był powiedzieć, że polip występował wielokrotnie w liście,
p
chociaż teraz, gdy musiałem wyjaśnić dowcip, nawet to nie wydaje się śmieszne.Czasami powinieneś po prostu wyjść, gdy jesteś w tyle :-)
źródło
Poly = many and Morph = change or form
Polimorfizm polega na tym, że można traktować obiekt jako ogólną wersję czegoś, ale gdy uzyskuje się do niego dostęp, kod określa, jaki jest dokładnie typ i wywołuje powiązany kod.
Oto przykład w języku C #. Utwórz cztery klasy w aplikacji konsoli:
Teraz utwórz następujące polecenie w Main () modułu dla aplikacji konsoli:
W tym przykładzie tworzymy listę klasy podstawowej Vehicle, która nie wie, ile kół ma każda z jej podklas, ale wie, że każda podklasa jest odpowiedzialna za wiedzieć, ile ma kół.
Następnie dodajemy rower, samochód i ciężarówkę do listy.
Następnie możemy zapętlić każdy pojazd na liście i traktować je wszystkie identycznie, jednak gdy uzyskujemy dostęp do właściwości każdego koła pojazdu, klasa pojazdu przekazuje wykonanie tego kodu odpowiedniej podklasie.
Mówi się, że ten kod jest polimorficzny, ponieważ dokładny kod, który jest wykonywany, jest określony przez podklasę, do której odwołuje się w czasie wykonywania.
Mam nadzieję, że to ci pomoże.
źródło
Class_Excel
,Class_CSV
do której można by ją wywołać lub miećReader
klasę o nazwie. Tak czy inaczej, jakiś rodzaj iteracji, jeśli / to / else będzie musiał gdzieś być przechowywany.Dzięki zrozumieniu i zastosowaniu polimorfizmu w PHP , dzięki Steve Guidetti.
źródło
Jeśli ktoś powie CUT tym osobom
Co się stanie?
Tak więc powyższa reprezentacja pokazuje Co to jest polimorfizm (ta sama nazwa, inne zachowanie) w OOP.
Jeśli wybierasz się na rozmowę, a ankieter prosi o przekazanie / pokazanie żywego przykładu polimorfizmu w tym samym pokoju, w którym siedzimy,
Odpowiedź - Drzwi / Windows
Zastanawiasz się jak?
Przez drzwi / okno - osoba może przyjść, może przyjść powietrze, może przyjść światło, może przyjść deszcz itp.
Aby to lepiej zrozumieć i w prosty sposób użyłem powyższego przykładu. Jeśli potrzebujesz referencji do kodu, postępuj zgodnie z powyższymi odpowiedziami.
źródło
.foo()
metodę, to powinny one mieć wspólny interfejs. Nie jest to jednak prawdą i prowadzi do nieprawidłowych abstrakcji. Interfejs powinien określać rolę, która ma być odgrywana, która może mieć wiele różnych implementacji, ale wszystkie pobierają z tego samego zestawu danych wejściowych i zwracają coś z tego samego zestawu danych wyjściowych. Dane wejściowex.cut(...)
dla chirurga, stylisty lub aktora nie są takie same, podobnie jak wyniki.Proste objaśnienie przez analogię
Prezydent Stanów Zjednoczonych stosuje polimorfizm. W jaki sposób? Cóż, ma wielu doradców:
Każdy powinien być odpowiedzialny tylko za jedną rzecz: Przykład:
Prezydent nie jest ekspertem w dziedzinie cynkowania ani fizyki kwantowej. Nie wie wielu rzeczy - ale wie tylko jedno: jak rządzić krajem.
Podobnie jest z kodem: obawy i obowiązki powinny być rozdzielone na odpowiednie klasy / osoby. W przeciwnym razie prezydent miałby dosłownie wszystko na świecie - całą Wikipedię. Wyobraź sobie, że cała wikipedia znajduje się w klasie twojego kodu: utrzymanie go byłoby koszmarem.
Dlaczego to zły pomysł, żeby prezydent wiedział o tych wszystkich konkretnych sprawach?
Gdyby prezydent konkretnie powiedział ludziom, co ma robić, oznaczałoby to, że prezydent musi wiedzieć dokładnie , co robić. Jeśli prezydent musi sam wiedzieć konkretne rzeczy, oznacza to, że kiedy trzeba dokonać zmiany, trzeba ją wprowadzić w dwóch miejscach, a nie w jednym.
Na przykład, jeśli EPA zmieni przepisy dotyczące zanieczyszczenia, to kiedy tak się stanie: będziesz musiał zmienić klasę EPA, a także klasę prezydenta. Zmiana kodu w dwóch miejscach zamiast w jednym może być niebezpieczna - ponieważ jest o wiele trudniejsza w utrzymaniu.
Czy istnieje lepsze podejście?
Istnieje lepsze podejście: prezydent nie musi znać specyfiki czegokolwiek - może zażądać najlepszej porady od osób, którym powierzono konkretne zadanie.
Przykład - zastosowania podejścia polimorficznego:
Jedyne, co robi prezydent, to prosić ludzi, aby mu doradzali - i tak właśnie robi w prawdziwym życiu - i to właśnie powinien zrobić dobry prezydent. wszyscy jego doradcy reagują inaczej, ale wszyscy wiedzą, co prezydent ma na myśli: Advise (). Setki ludzi strumieniuje do jego biura. Nie ma znaczenia, kim oni są. Prezydent wie tylko, że kiedy prosi ich o „Doradztwo”, wie, jak odpowiednio odpowiedzieć :
Takie podejście pozwala prezydentowi rządzić krajem dosłownie, nie wiedząc nic o sprawach wojskowych, opiece zdrowotnej czy dyplomacji międzynarodowej: szczegóły pozostawia się ekspertom. Jedyne, co prezydent musi wiedzieć, to: „Advise ()”.
Czego NIE CHCESZ:
NIE! NIE! NIE! W powyższym scenariuszu prezydent wykonuje całą pracę: wie o zwiększeniu liczby żołnierzy i wcześniejszych warunkach. Oznacza to, że jeśli zmieni się polityka Bliskiego Wschodu, prezydent będzie musiał zmienić swoje polecenia, a także klasę Petraeus. Powinniśmy tylko zmienić klasę Petraeusa, ponieważ Prezydent nie powinien być zmuszony do zagłębiania się w tego rodzaju szczegóły. Nie musi wiedzieć o szczegółach. Musi tylko wiedzieć, że jeśli złoży jedno zamówienie, wszystko zostanie załatwione. Wszystkie szczegóły należy pozostawić ekspertom.
To pozwala prezydentowi robić to, co robi najlepiej: ustalać ogólne zasady, dobrze wyglądać i grać w golfa: P.
Jak to jest faktycznie zaimplementowane - poprzez klasę bazową lub wspólny interfejs
To w efekcie polimorfizm w skrócie. Jak to się dokładnie robi? Poprzez „wdrożenie wspólnego interfejsu” lub użycie klasy podstawowej (dziedziczenie) - zobacz powyższe odpowiedzi, które szczegółowo to opisują. (Aby lepiej zrozumieć tę koncepcję, musisz wiedzieć, czym jest interfejs, i musisz zrozumieć, czym jest dziedzictwo. Bez tego możesz się zmagać).
Innymi słowy, Petraeus, Condi i HealthOfficials całości byłoby klasy, która „implementować interfejs” - nazwijmy to niech był na
IAdvisor
interfejs, który zawiera tylko jedną metodę:Advise()
. Ale teraz wchodzimy w szczegóły.To byłoby idealne
Podsumowanie
Wszystko, co naprawdę musisz wiedzieć, to:
Naprawdę mam nadzieję, że ci to pomoże. Jeśli nic nie rozumiesz, opublikuj komentarz, a ja spróbuję ponownie.
źródło
if healthAdvisor? then do this:
iif petraus then do that etc.
ten schemat będzie musiał zostać powtórzony, co jest niepotrzebne i skomplikowane. patrz wyżej edycja.Polimorfizm to zdolność do traktowania klasy obiektu tak, jakby była klasą nadrzędną.
Załóżmy na przykład, że istnieje klasa Animal i klasa Dog, która dziedziczy od Animal. Polimorfizm to zdolność do traktowania dowolnego obiektu psa jako obiektu zwierzęcego w następujący sposób:
źródło
classes have different functionality while sharing a common interface
Wielopostaciowość:
Jest to koncepcja programowania obiektowego. Zdolność różnych obiektów do reagowania, każdy na swój sposób, na identyczne komunikaty, nazywa się polimorfizmem.
Polimorfizm wynika z faktu, że każda klasa żyje we własnej przestrzeni nazw. Nazwy przypisane w definicji klasy nie powodują konfliktu z nazwami przypisanymi gdziekolwiek poza nią. Dotyczy to zarówno zmiennych instancji w strukturze danych obiektu, jak i metod obiektu:
Tak jak pola struktury C znajdują się w chronionej przestrzeni nazw, podobnie zmienne instancji obiektu.
Nazwy metod są również chronione. W przeciwieństwie do nazw funkcji C, nazwy metod nie są symbolami globalnymi. Nazwa metody w jednej klasie nie może kolidować z nazwami metod w innych klasach; dwie bardzo różne klasy mogą implementować metody o identycznych nazwach.
Nazwy metod są częścią interfejsu obiektu. Gdy wiadomość jest wysyłana z żądaniem, aby obiekt coś zrobił, nazwa określa metodę, którą obiekt powinien wykonać. Ponieważ różne obiekty mogą mieć metody o tej samej nazwie, znaczenie komunikatu należy rozumieć w odniesieniu do konkretnego obiektu, który odbiera komunikat. Ta sama wiadomość wysłana do dwóch różnych obiektów może wywoływać dwie różne metody.
Główną zaletą polimorfizmu jest to, że upraszcza interfejs programowania. Umożliwia ustanowienie konwencji, które mogą być ponownie wykorzystane w klasie po klasie. Zamiast wymyślać nową nazwę dla każdej nowej funkcji dodawanej do programu, można użyć tych samych nazw. Interfejs programistyczny można opisać jako zbiór zachowań abstrakcyjnych, całkiem oprócz klas, które je implementują.
Przykłady:
Przykład 1: W tym przykładzie jest prosty napisany w Python 2.x .
Przykład 2: Polimorfizm jest implementowany w Javie przy użyciu przeciążania metod i pojęć zastępujących metody .
Rozważmy przykład samochodu do dyskusji na temat polimorfizmu. Weź jakąkolwiek markę, taką jak Ford, Honda, Toyota, BMW, Benz itp., Wszystko jest typu Samochód.
Ale każdy z nich ma własne zaawansowane funkcje i bardziej zaawansowaną technologię związaną z ich ruchem.
Teraz stwórzmy podstawowy typ samochodu
Car.java
Zaimplementujmy przykład Ford Car.
Ford rozszerza typ samochodu o dziedziczenie wszystkich jego członków (właściwości i metody).
Ford.java
Powyższa klasa Forda rozszerza klasę Car, a także implementuje metodę move (). Chociaż metoda przeniesienia jest już dostępna dla Forda poprzez Dziedziczenie, Ford wciąż wdrożył tę metodę na swój własny sposób. Nazywa się to przesłonięciem metody.
Honda.java
Podobnie jak Ford, Honda rozszerza także typ samochodu i na swój sposób wdrożyła metodę ruchu.
Zastępowanie metod jest ważną funkcją umożliwiającą polimorfizm. Używając przesłonięcia metody, typy podrzędne mogą zmienić sposób działania metod, które są dostępne poprzez dziedziczenie.
PolimorfizmPrzykład.java
Przykładowy wynik polimorfizmu:
W głównej metodzie klasy PolymorphismExample stworzyłem trzy obiekty - Car, Ford i Honda. Wszystkie trzy obiekty są przypisane do typu samochodu.
Zwróćmy uwagę na ważną kwestię, że typ superklasy może odnosić się do typu obiektu podklasy, ale wice-wers nie jest możliwy. Powodem jest to, że wszyscy członkowie superklasy są dostępni do podklasy za pomocą dziedziczenia, a podczas kompilacji kompilator próbuje ocenić, czy używany przez nas typ odwołania ma metodę, do której próbuje uzyskać dostęp.
Tak więc dla referencji car, f i hw Polimorfizmie Przykładowo istnieje metoda przenoszenia z typu Car. Tak więc kompilator przechodzi proces kompilacji bez żadnych problemów.
Ale jeśli chodzi o wykonanie w czasie wykonywania, maszyna wirtualna wywołuje metody na obiektach, które są podtypami. Tak więc metoda move () jest wywoływana z ich odpowiednich implementacji.
Zatem wszystkie obiekty są typu Car, ale w czasie wykonywania wykonanie zależy od obiektu, na który ma miejsce wywołanie. Nazywa się to polimorfizmem.
źródło
Zwykle odnosi się to do zdolności obiektu typu A do zachowania się jak obiekt typu B. W programowaniu obiektowym jest to zwykle osiągane przez dziedziczenie. Niektóre linki do Wikipedii, aby przeczytać więcej:
EDYCJA: naprawiono uszkodzone linki.
źródło
classes have different functionality while sharing a common interface
Polimorfizm jest taki:
możesz przekazać tylko Puchar zamiast konkretnej instancji. Pomaga to w ogólności, ponieważ nie trzeba podawać konkretnej instancji Measure () dla każdego typu kubka
źródło
Wiem, że to jest starsze pytanie z wieloma dobrymi odpowiedziami, ale chciałbym podać odpowiedź w jednym zdaniu:
Powyżej jest wiele przykładów, które pokazują to w działaniu, ale uważam, że to dobra zwięzła odpowiedź.
źródło
(Przeglądałem kolejny artykuł na coś zupełnie innego ... i pojawił się polimorfizm ... Teraz pomyślałem, że wiem, czym jest polimorfizm ... ale najwyraźniej nie w ten piękny sposób wyjaśniony ... Chciałem gdzieś to zapisać ... lepiej nadal będzie to udostępniać ...)
http://www.eioba.com/a/1htn/how-i-explained-rest-to-my-wife
czytaj dalej z tej części:
..... polimorfizm. To jest naukowy sposób na powiedzenie, że różne rzeczowniki mogą mieć do nich ten sam czasownik.
źródło
Ogólnie rzecz biorąc, jest to zdolność do interfejsu wielu różnych typów obiektów przy użyciu tego samego lub powierzchownie podobnego API. Istnieją różne formy:
Przeciążenie funkcji: zdefiniowanie wielu funkcji o tej samej nazwie i różnych typach parametrów, takich jak sqrt (zmiennoprzecinkowy), sqrt (podwójny) i sqrt (złożony). W większości języków, które to umożliwiają, kompilator automatycznie wybiera poprawny typ argumentu, który jest do niego przekazywany, dlatego jest to polimorfizm w czasie kompilacji.
Metody wirtualne w OOP: metoda klasy może mieć różne implementacje dostosowane do specyfiki jej podklas; każdy z nich zastępuje implementację podaną w klasie bazowej. Biorąc pod uwagę obiekt, który może należeć do klasy podstawowej lub dowolnej jego podklasy, poprawna implementacja jest wybierana w locie, a więc jest to polimorfizm w czasie wykonywania.
Szablony: funkcja niektórych języków OO, w której funkcję, klasę itp. Można sparametryzować według typu. Na przykład możesz zdefiniować ogólną klasę szablonów „list”, a następnie utworzyć ją jako „listę liczb całkowitych”, „listę ciągów znaków”, a może nawet „listę list ciągów znaków” lub tym podobne. Zasadniczo kod pisze się raz dla struktury danych o dowolnym typie elementu, a kompilator generuje jego wersje dla różnych typów elementów.
źródło
Termin polimorfizm pochodzi od:
poli = wiele
morfizm = zdolność do zmiany
W programowaniu polimorfizm jest „techniką”, która pozwala „spojrzeć” na obiekt jako na więcej niż jeden rodzaj rzeczy. Na przykład:
Obiekt studencki to także obiekt osobisty. Jeśli „spojrzysz” (tj. Obsada) na ucznia, prawdopodobnie możesz poprosić o jego identyfikator. Nie zawsze możesz to zrobić z osobą, prawda? (osoba niekoniecznie jest studentem, dlatego może nie mieć legitymacji studenckiej). Jednak osoba prawdopodobnie ma imię. Student też.
Podsumowując, „patrzenie” na ten sam obiekt pod różnymi „kątami” może dać ci różne „perspektywy” (tj. Różne właściwości lub metody)
Ta technika pozwala więc budować rzeczy, na które można „spojrzeć” z różnych punktów widzenia.
Dlaczego używamy polimorfizmu? Na początek ... abstrakcja. W tym momencie powinno wystarczyć wystarczająca ilość informacji :)
źródło
Użyjmy analogii. Dla danego scenariusza muzycznego każdy muzyk, który go gra, ma swój własny akcent w interpretacji.
Muzykę można wyabstrahować za pomocą interfejsów, gatunek, do którego należy muzyk, może być klasą abstrac, która określa globalne reguły interpretacji, a każdego muzyka, który gra, można wymodelować za pomocą konkretnej klasy.
Jeśli jesteś słuchaczem dzieła muzycznego, masz odniesienie do scenariusza, np. „Fuga i Tocata” Bacha, a każdy muzyk, który go wykonuje, robi to polimorficznie na swój sposób.
To tylko przykład możliwego projektu (w Javie):
źródło
AnnHalloway
iVictorBorga
czuję, że powinny być obiektami, a nie klasami - twój przykład lepiej czytałby z np.public class Pianist implements Musician
ivictorBorge = new Pianist();
itp.Przedstawiłem ogólny przegląd polimorfizmu dla innego pytania:
Polimorfizm w c ++
Mam nadzieję, że to pomoże. Ekstrakt...
(ciąg dalszy na Polimorfizm w c ++ )
źródło
Polimorfizm to zdolność obiektu, którą można przyjmować w wielu formach. Na przykład w klasie ludzkiej mężczyzna może działać w wielu formach, gdy mówimy o związkach. EX: Mężczyzna jest ojcem syna, a mąż jego żony i nauczycielem swoich uczniów.
źródło
Polimorfizm to zdolność obiektu do przyjmowania wielu form. Najczęstsze zastosowanie polimorfizmu w OOP występuje, gdy odwołanie do klasy nadrzędnej jest używane do odwołania do obiektu klasy podrzędnej. W tym przykładzie napisanym w Javie mamy trzy typy pojazdów. Tworzymy trzy różne obiekty i próbujemy uruchomić ich metodę kół:
Wynik to:
Aby uzyskać więcej informacji, odwiedź https://github.com/m-vahidalizadeh/java_advanced/blob/master/src/files/PolymorphismExample.java . Mam nadzieję, że to pomoże.
źródło
Polimorfizm to zdolność programisty do pisania metod o tej samej nazwie, które wykonują różne czynności dla różnych typów obiektów, w zależności od potrzeb tych obiektów. Na przykład, jeśli tworzysz klasę o nazwie
Fraction
i klasę o nazwieComplexNumber
, obie z nich mogą zawierać metodę o nazwiedisplay()
, ale każda z nich implementowałaby tę metodę inaczej. Na przykład w PHP możesz to zaimplementować w następujący sposób:Wyjścia:
Niektóre inne odpowiedzi wydają się sugerować, że polimorfizm jest używany tylko w połączeniu z dziedziczeniem; na przykład być może
Fraction
iComplexNumber
obie implementują klasę abstrakcyjną o nazwie,Number
która ma metodędisplay()
, którą Fraction i ComplexNumber są następnie zobowiązane do implementacji. Ale nie potrzebujesz dziedziczenia, aby skorzystać z polimorfizmu.Przynajmniej w dynamicznie pisanych językach, takich jak PHP (nie wiem o C ++ lub Javie), polimorfizm pozwala deweloperowi wywołać metodę bez konieczności znajomości typu obiektu z wyprzedzeniem i ufając, że poprawna implementacja metody będzie Zostać wezwanym. Załóżmy na przykład, że użytkownik wybiera typ
Number
utworzonego:W takim przypadku
display()
zostanie wywołana odpowiednia metoda, nawet jeśli programista nie będzie wiedział z góry, czy użytkownik wybierze ułamek, czy liczbę zespoloną.źródło
W programowaniu obiektowym polimorfizm odnosi się do zdolności języka programowania do przetwarzania obiektów w różny sposób w zależności od ich typu danych lub klasy . Mówiąc dokładniej, jest to zdolność do redefiniowania metod dla klas pochodnych.
źródło
Polimorfizm dosłownie oznacza wiele kształtów. (lub wiele postaci): Obiekt z różnych klas i metoda o tej samej nazwie, ale przepływy pracy są różne. Prostym przykładem byłoby:
Rozważ osobę X.
Jest tylko jedną osobą, ale działa tak samo. Możesz zapytać, jak:
Jest synem swojej matki. Przyjaciel dla swoich przyjaciół. Brat dla swojej siostry.
źródło
Polimorfizm w OOP oznacza, że klasa może mieć różne typy, dziedziczenie jest jednym ze sposobów implementacji polimorfizmu.
na przykład Shape jest interfejsem, ma kwadrat , koło , podtypy Diament . teraz masz obiekt Kwadrat, możesz automatycznie zmienić kwadrat na Kształt, ponieważ Kwadrat jest Kształtem. Ale kiedy próbujesz obniżyć kształt do kwadratu, musisz wykonać rzut typu jawnego, ponieważ nie można powiedzieć, że kształt jest kwadratem, może to być również koło. więc musisz ręcznie rzucić go za pomocą kodu
Square s = (Square)shape
, co jeśli kształt ma kształt Koło, otrzymaszjava.lang.ClassCastException
, ponieważ Okrąg nie jest Kwadratem.źródło
Wielopostaciowość:
Zmienna referencyjna typu interfejsu może odnosić się do dowolnej instancji klasy, która implementuje ten interfejs.
źródło
Polimorfizm to zdolność do używania obiektu w danej klasie, w której wszystkie komponenty tworzące obiekt są dziedziczone przez podklasy danej klasy. Oznacza to, że gdy obiekt zostanie zadeklarowany przez klasę, wszystkie podklasy poniżej (i ich podklasy itd., Aż do osiągnięcia najdalszej / najniższej podklasy) dziedziczą obiekt i jego komponenty (makijaż).
Pamiętaj, że każda klasa musi być zapisana w osobnych plikach.
Poniższy kod ilustruje polimorfizm:
SuperClass:
Ojciec, podklasa:
Dziecko, kolejna podklasa:
Metoda wykonania odwołuje się do klasy nadrzędnej, aby rozpocząć:
Pamiętaj, że każdą klasę należy zadeklarować w osobnych plikach * .java. Kod powinien się skompilować. Zauważ też, że możesz dalej używać maidenName i familyTree dalej. To jest koncepcja polimorfizmu. Pojęcie dziedziczenia jest również badane tutaj, gdzie jedna klasa może być użyta lub jest dalej zdefiniowana przez podklasę.
Mam nadzieję, że to pomaga i wyjaśnia. Opublikuję wyniki, gdy znajdę komputer, którego mogę użyć do zweryfikowania kodu. Dzięki za cierpliwość!
źródło
Polimorfizm pozwala tej samej procedurze (funkcji, metodzie) działać na różne typy.
Ponieważ wiele istniejących odpowiedzi łączy podtyp z polimorfizmem, oto trzy sposoby (w tym podtyp) na wdrożenie polimorfizmu.
Zobacz też:
http://wiki.c2.com/?CategoryPolymorphism
https://en.wikipedia.org/wiki/Polymorphism_(computer_science)
źródło
W językach zorientowanych obiektowo polimorfizm umożliwia leczenie i obsługę różnych typów danych za pośrednictwem tego samego interfejsu. Rozważmy na przykład dziedziczenie w C ++: klasa B pochodzi od klasy A. Wskaźnik typu A * (wskaźnik do klasy A) może być używany do obsługi zarówno obiektu klasy A ORAZ obiektu klasy B.
źródło
Polimorfizm w kategoriach kodowania polega na tym, że Twój obiekt może istnieć jako wiele typów poprzez dziedziczenie itp. Jeśli utworzysz klasę o nazwie „Kształt”, która określa liczbę stron, które ma Twój obiekt, możesz następnie utworzyć nową klasę, która odziedziczy go, na przykład „Kwadrat” „. Kiedy następnie utworzysz instancję „Kwadrat”, możesz rzucić ją z powrotem i do przodu z „Kształtu” na „Kwadrat” zgodnie z wymaganiami.
źródło
Polimorfizm daje możliwość tworzenia jednego modułu wywołującego inny, a jednocześnie posiadającego punkt zależności czasowej kompilacji od przepływu kontroli zamiast z przepływem kontroli.
Dzięki zastosowaniu polimorfizmu moduł wysokiego poziomu nie zależy od modułu niskiego poziomu. Oba zależą od abstrakcji. Pomaga nam to zastosować zasadę inwersji zależności ( https://en.wikipedia.org/wiki/Dependency_inversion_principle ).
Tutaj znalazłem powyższą definicję. Po około 50 minutach filmu instruktor wyjaśnia powyższe. https://www.youtube.com/watch?v=TMuno5RZNeE
źródło
Co to jest polimorfizm?
Polimorfizm to zdolność do:
Wywołaj operację na instancji typu specjalistycznego, znając tylko jej typ uogólniony, podczas wywoływania metody typu specjalistycznego, a nie metody typu uogólnionego: jest to dynamiczny polimorfizm .
Zdefiniuj kilka metod o nazwie zapisu, ale o różnych parametrach: jest to polimorfizm statyczny .
Pierwsza, jeśli historyczna definicja i najważniejsza.
Do czego służy polimorfizm?
Umożliwia tworzenie silnie typowanej spójności hierarchii klas i wykonywanie pewnych magicznych rzeczy, takich jak zarządzanie listami obiektów różnych typów bez znajomości ich typów, ale tylko jednego z ich rodzica, a także powiązań danych.
Mocne i słabe pisanie
Próba
Oto niektóre Kształty, takie jak Punkt, Linia, Prostokąt i Okrąg, których operacja Draw () przyjmuje albo nic, albo parametr, aby ustawić limit czasu, aby go usunąć.
Tutaj klasa Shape i metody Shape.Draw () powinny być oznaczone jako abstrakcyjne.
Nie mają na celu zrozumienia.
Wyjaśnienie
Bez polimorfizmu, używając abstrakcyjnego wirtualnego przesłonięcia, podczas analizowania kształtów, wywoływana jest tylko metoda Spahe.Draw (), ponieważ CLR nie wie, którą metodę wywołać. Wywołuje więc metodę typu, na której działamy, a tutaj typem jest Shape ze względu na deklarację listy. Więc kod nic nie robi.
Dzięki polimorfizmowi CLR jest w stanie wywnioskować rzeczywisty typ obiektu, na którym działamy, używając tak zwanej wirtualnej tabeli. Więc to nazywa dobroWywołuje metodę, a tutaj wywołanie Shape.Draw (), jeśli Shape is Point wywołuje Point.Draw (). Kod rysuje kształty.
Więcej odczytów
C # - polimorfizm (poziom 1)
Polimorfizm w Javie (poziom 2)
Polimorfizm (przewodnik programowania w języku C #)
Tabela metod wirtualnych
źródło