Różnica Między Wirtualnością A Abstrakcją

Różnica Między Wirtualnością A Abstrakcją
Różnica Między Wirtualnością A Abstrakcją

Wideo: Różnica Między Wirtualnością A Abstrakcją

Wideo: Różnica Między Wirtualnością A Abstrakcją
Wideo: Różnice pomiędzy interfejsem a klasą abstrakcyjną w .NET - Standardowe Pytania Rekrutacyjne 2024, Listopad
Anonim

Wirtualne vs abstrakcyjne

Wirtualne i abstrakcyjne to dwa słowa kluczowe używane w większości języków programowania zorientowanych obiektowo (OO), takich jak Java i C #. Chociaż istnieją niewielkie różnice w znaczeniu tego słowa w różnych językach, zarówno słowa kluczowe wirtualne, jak i abstrakcyjne zapewniają poczucie częściowej implementacji do jednostek, do których jest dołączony.

Abstrakcyjny

Zazwyczaj nie można utworzyć instancji klas abstrakcyjnych, zwanych również abstrakcyjnymi klasami bazowymi (ABC) (nie można utworzyć instancji tej klasy). Tak więc klasy abstrakcyjne mają sens tylko wtedy, gdy język programowania obsługuje dziedziczenie (możliwość tworzenia podklas z rozszerzania klasy). Klasy abstrakcyjne zwykle reprezentują abstrakcyjną koncepcję lub jednostkę z częściową implementacją lub bez implementacji. W związku z tym klasy abstrakcyjne działają jako klasy nadrzędne, z których pochodzą klasy potomne, dzięki czemu klasa podrzędna będzie miała wspólne niekompletne cechy klasy nadrzędnej i można dodać funkcje w celu ich uzupełnienia. Klasy abstrakcyjne mogą zawierać metody abstrakcyjne. Podklasy rozszerzające klasę abstrakcyjną mogą implementować te (dziedziczone) metody abstrakcyjne. Jeśli klasa potomna implementuje wszystkie takie metody abstrakcyjne, jest to klasa konkretna. Ale jeśli nie,klasa potomna również staje się klasą abstrakcyjną. Wszystko to oznacza, że programista nominując klasę jako abstrakcję, mówi, że klasa będzie niekompletna i będzie zawierała elementy, które muszą zostać uzupełnione przez dziedziczące podklasy. To fajny sposób na stworzenie kontraktu między dwoma programistami, co upraszcza zadania w tworzeniu oprogramowania. Programista, który pisze kod do dziedziczenia, musi dokładnie przestrzegać definicji metod (ale oczywiście może mieć własną implementację). W językach Java i C # klasy i metody abstrakcyjne są deklarowane za pomocą słowa kluczowego Abstract. To fajny sposób na stworzenie kontraktu między dwoma programistami, co upraszcza zadania w tworzeniu oprogramowania. Programista, który pisze kod do dziedziczenia, musi dokładnie przestrzegać definicji metod (ale oczywiście może mieć własną implementację). W językach Java i C # klasy i metody abstrakcyjne są deklarowane za pomocą słowa kluczowego Abstract. To fajny sposób na stworzenie kontraktu między dwoma programistami, co upraszcza zadania w tworzeniu oprogramowania. Programista, który pisze kod do dziedziczenia, musi dokładnie przestrzegać definicji metod (ale oczywiście może mieć własną implementację). W językach Java i C # klasy i metody abstrakcyjne są deklarowane za pomocą słowa kluczowego Abstract.

Wirtualny

Wirtualne metody / funkcje zapewniają możliwość opcjonalnego przesłonięcia jego zachowania przez dziedziczącą klasę (przy użyciu funkcji z tym samym podpisem). Koncepcja funkcji wirtualnej jest ważna w następującym scenariuszu. Załóżmy, że klasa jest pochodną klasy potomnej, a wtedy ilekroć używany jest obiekt klasy pochodnej, może on odnosić się do obiektu klasy bazowej lub klasy pochodnej. Jednak zachowanie wywołania metody może być niejednoznaczne, jeśli metody klasy bazowej zostaną zastąpione. Tak więc, aby rozwiązać tę niejednoznaczność, używane jest słowo kluczowe Virtual. Jeśli metoda jest oznaczona jako wirtualna, wywoływana jest funkcja klasy pochodnej (jeśli istnieje) lub w innym przypadku wywoływana jest funkcja klasy bazowej. Na przykład w C ++ słowo kluczowe Virtual jest używane właśnie w tym celu. W języku C # słowo kluczowe Virtual jest używane w podobny sposób, ale dodatkowodo zmodyfikowania wszystkich przesłoniętych metod należy użyć słowa kluczowego override. Ale w Javie nie ma wyraźnego słowa kluczowego Virtual. Wszystkie metody niestatyczne są uważane za wirtualne. Funkcje wirtualne bez treści nazywane są funkcjami czystymi wirtualnymi. W Javie i C # metody abstrakcyjne są w rzeczywistości czysto wirtualne.

Różnica między wirtualnością a abstrakcją

Chociaż abstrakcyjne i wirtualne to dwa słowa kluczowe / pojęcia, które zapewniają znaczenie niekompletnej implementacji związanym z nimi jednostkom, mają swoje różnice. Metody abstrakcyjne (które muszą być zdefiniowane w klasach abstrakcyjnych) w ogóle nie mają implementacji, podczas gdy metody wirtualne mogą mieć implementację. Jeśli metody abstrakcyjne są rozszerzone o konkretną klasę, wszystkie dziedziczone metody abstrakcyjne muszą zostać zaimplementowane, a dziedziczone metody wirtualne mogą, ale nie muszą, zostać zastąpione.

Zalecane: