Czy polimorfizm to kolejny termin na przeciążenie?Czy polimorfizm to kolejny termin przeciążania?
Odpowiedz
Nie; przeciążenie tworzy metodę o tej samej nazwie z inną ilością parametrów lub z parametrami innego typu.
Polimorfizm polega na zmianie implementacji/funkcjonalności określonej metody na różne typy (wszystkie mają ten sam "typ podstawowy").
Przeciążenie:
public class TestClass
{
public void DoSomething(int a, int b) {}
public void DoSomething(int a, int b, string x) {}
}
Polimorfizm:
public abstract class Base
{
public abstract DoSomething();
}
public class A : Base
{
public override DoSomething()
{
Console.WriteLine("I am A");
}
}
public class B : Base
{
public override DoSomething()
{
Console.WriteLine("I am B");
}
}
To musi być zrobione przez interfejs poprawny? –
Niekoniecznie interfejs. Wystarczy standardowa klasa bazowa. – sharptooth
Można to zrobić za pomocą interfejsu, a także klasy podstawowej lub abstrakcyjnej. Chodzi o to, że nie ma znaczenia, jaki jest konkretny typ obiektu. Po prostu musi być nieodróżnialny od podstawy dla celów korzystania z bazy; bez względu na podstawę. –
Różnica pomiędzy polimorfizmem metodą przeciążeniem jest w czasie, gdy jest określana rzeczywista sposób wykonać. Powodem tego jest to, że gdy metoda jest przeciążona, takich jak:
account = new BankAccount();
account = new BankAccount(1000);
Kompilator może powiedzieć, który konstruktor używać podpisem metody, w tym liczby i typów parametrów usług. Ten wybór metody użycia w czasie kompilacji, zanim program kiedykolwiek zostanie uruchomiony, nazywa się wczesnym wiązaniem. Z drugiej strony, gdy użyjemy metody polimorficznej, takiej jak x.getMeasure(), faktyczna metoda getMeasure() zależy od tego, do jakiego typu obiektu x się odnosi. Ponieważ obiekty nie są konstruowane do czasu uruchomienia programu, wywoływana metoda jest określana w czasie wykonywania. Dlatego maszyna wirtualna, a nie kompilator wybiera odpowiednią metodę. Ta metoda jest nazywana późnym wiązaniem.
Nie, nie jest.
Przeciążenie odnosi się do tworzenia metody lub operatora o tej samej nazwie, ale różnych parametrów i - w zależności od języka - różnych typów zwracanych.
Zastępowanie dotyczy reimplementing metodę z tego samego podpisu w klasie pochodnej i umożliwia polimorfizm - decyzję co wdrożenie nadpisane metody połączenie jest wykonane w czasie wykonywania w zależności od rzeczywistego typu obiektu.
class BaseClass
{
public void DoStuff(Int32 value) { } // Overloading
public void DoStuff(String value) { } // Overloading
public virtual void DoOtherStuff(String value) { }
}
class DerivedClass : BaseClass
{
public override void DoOtherStuff(String value) { } // Overriding
}
Przykład użycia
BaseClass instance = null;
if (condition)
{
instance = new BaseClass();
}
else
{
instance = new DerivedClass();
}
// Using overloads
instance.DoStuff(4);
instance.DoStuff("four");
// Polymorphism - it depends on the actual type of the object
// referenced by the variable 'instance' if BaseClass.DoOtherStuff()
// or DerivedClass.DoOtherStuff() will be called at runtime.
instance.DoOtherStuff("other stuff");
nr
Polymorphism jest cechą języka programowania, który pozwala wartości różnych typów danych mają być obsługiwane za pomocą jednolitego interfejsu. Pojęcie parametrycznego polimorfizmu dotyczy zarówno typów danych, jak i funkcji. Funkcja, którą można ocenić lub zastosować do wartości różnych typów, znana jest jako funkcja polimorficzna. Typ danych, który może wydawać się typem uogólnionym (np. Lista z elementami dowolnego typu) jest określany polimorficznym typem danych, takim jak typ uogólniony, z którego wykonywane są takie specjalizacje.
Method overloading jest cechą znaleźć w różnych językach programowania takich jak Ada, C#, C++, D i Java, które pozwala na tworzenie kilku metod o tej samej nazwie, które różnią się od siebie pod względem rodzaju wejścia i typ wyjścia funkcji.
Metoda przeciążania nie powinna być mylona z polimorfizmem typu lub funkcjami wirtualnymi. W nich w czasie wykonywania wybrana jest właściwa metoda.
Źródło: Wikipedia.
- 1. Metoda przeciążania i polimorfizm
- 2. "Polimorfizm dotyczy przeważania, a nie przeciążania"?
- 3. Czy wielopoziomowy polimorfizm jest możliwy w SQLAlchemy?
- 4. Wyjaśnienie dotyczące przeciążania
- 5. Upraszczanie ciągłego przeciążania?
- 6. Funkcja przeciążania wskaźnikiem funkcji
- 7. R - Funkcja przeciążania
- 8. "Ręczna" rozdzielczość przeciążania sygnatur
- 9. Metoda przeciążania w pythoniu
- 10. Polimorfizm według parametru funkcji
- 11. Metoda przeciążania zwracanych wartości
- 12. Dołącz kolejny plik JSP
- 13. Jak działa polimorfizm Perla?
- 14. Static polimorfizm w C++
- 15. generyczne interfejsy i polimorfizm
- 16. Polimorfizm i Metody statyczne
- 17. Rodzinny polimorfizm w Scali
- 18. Polimorfizm ze zmiennych instancji
- 19. Metoda przeciążania dekoratora
- 20. GWT 2.4.0 RequestFactory polimorfizm
- 21. Polimorfizm w WCF
- 22. Operatory globalne i polimorfizm
- 23. Polimorfizm idź lang
- 24. Polimorfizm w modelach Django
- 25. Czy selektory w Objective-C to kolejny sposób wysyłania wiadomości do obiektu?
- 26. JAXB: polimorfizm z rodzajowych
- 27. open() wywołanie systemowe polimorfizm
- 28. Typ Rodzina polimorfizm
- 29. PHP: termin „Wczoraj”, „Dzisiaj”
- 30. Polimorfizm i metoda przeciążenia
Oto ściśle powiązane pytanie http://stackoverflow.com/questions/673721/overloading-and-overriding – sharptooth
Lub ten http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading – ktulur
Myślę, że ten ma lepszą odpowiedź :) – thomasrutter