2009-05-05 11 views

Odpowiedz

41

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"); 
    } 
} 
+0

To musi być zrobione przez interfejs poprawny? –

+2

Niekoniecznie interfejs. Wystarczy standardowa klasa bazowa. – sharptooth

+2

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ę. –

9

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.

1

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"); 
5

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.