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 ????
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 ????
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.
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
@ 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. –
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
Streszczenie oznacza, że MUSISZ go zastąpić. Wirtualny oznacza, że możesz go zastąpić. Mniej więcej.
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
Zgadzam się z obiema odpowiedziami tutaj, więc nie będę ich powtarzać. Ale tutaj jest link, który może pomóc.
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