2010-03-16 18 views
6

zarówno abstrakcyjne, jak i wirtualne zostaną zastąpione klasami potomnymi, co jest różnicą.Czym różnią się abstrakcje od wirtualnych?

czy to wirtualna metoda ma ciało, a abstrakcja to tylko podpis ????

+0

Tak na marginesie, metody częściowych, w przeciwieństwie do abstrakcyjnych metod, pozwalają na stworzenie metod bez implementacji, które nie muszą być zastąpione nowymi. – Brian

Odpowiedz

24

czy jest to metoda wirtualna, a ciało i abstrakcja to tylko podpis ????

Dokładnie. Chodzi o to, że metody wirtualne mogą być nadpisywane w klasach pochodnych, podczas gdy abstrakcyjne metody muszą być nadpisywane. Podobnie, klasa, która ma co najmniej jedną abstrakcyjną metodę, sama musi być abstrakcyjna, tzn. Nie może być tworzona bezpośrednio, ponieważ jej (częściowo) brakuje w implementacji.

Wreszcie, każda abstrakcyjna metoda jest również wirtualna przez implikację. virtual oznacza po prostu, że metoda jest wywoływana w środowisku wykonawczym do odpowiedniej klasy, a więc może zostać przesłonięta w celu zaimplementowania polimorfizmu środowiska wykonawczego.

+0

Skoro abstrakcyjne metody MUSZĄ być nadpisane, to w rzeczywistości są kontraktami podobnymi do interfejsów, a kod kompilowałby się, gdybyś nie zaimplementował ich poprawnie, więc jest to sposób na to, aby użytkownicy twojego kodu wdrożyli kod, który muszą implementować, zwłaszcza jeśli są leniwi. , poprawne? – Xaisoft

+0

@ Xaisoft Prawidłowe, ale wirtualne (nie abstrakcyjne) metody również stanowią umowę, ponieważ umowa jest z punktu widzenia korzystania z klas (= klientów). Ważne jest tylko to, że klient może korzystać z funkcji klasy, którą reklamuje. –

+1

Zgadzam się, ale chodzi mi o to, że jeśli zadeklarujesz metodę wirtualną, klient nie musi jej implementować, nawet jeśli powinien. Również metoda wirtualna może mieć domyślne zachowanie. Klient musi wdrożyć metodę abstrakcyjną i nie może mieć domyślnego zachowania. Wydaje się, że jedynym powodem, dla którego chciałbyś pójść drogą abstrakcyjną a wirtualną, było to, czy naprawdę chciałeś wymusić wdrożenie metody i nałożenie na klienta. – Xaisoft

17

Streszczenie oznacza, że ​​MUSISZ go zastąpić. Wirtualny oznacza, że ​​możesz go zastąpić. Mniej więcej.

+4

Dodawanie do tego: W przypadku metod abstrakcyjnych w klasie cała klasa będzie abstrakcyjna, co oznacza, że ​​nie można tworzyć wystąpień tej klasy, a jedynie pochodnych nie-abstrakcyjnych podklas. – dbemerlin

Powiązane problemy