Abstrakcyjne klasy i interfejsy Podobieństwa: (1) może być dziedziczona (2) nie może być instancjonowana (3) może zawierać deklaracje metod (4) Klasa pochodna musi zaimplementować nieimplementowaną metodę Kategoria: (1) Abstrakcyjne klasy bazowe mogą definiować pola, właściwości i implementacje metod. Interfejsy mogą definiować jedynie atrybuty, indeksery, zdarzenia i deklaracje metod, nie mogą zawierać pól. (2) Klasa abstrakcyjna to klasa niekompletna, która wymaga dalszego doprecyzowania, podczas gdy interfejs jest normą behawioralną. Niestandardowe interfejsy Microsoftu zawsze mają odpowiednie pole, które potwierdza, że są wyrazem "Dam radę..." ” (3) Interfejsy mogą być implementowane wielokrotnie, a klasy abstrakcyjne mogą być dziedziczone tylko przez jedną osobę (4) Klasy abstrakcyjne są bardziej zdefiniowane pomiędzy serią blisko spokrewnionych klas, podczas gdy większość interfejsów to luźno powiązane klasy, które wszystkie implementują określoną funkcję (5) Klasy abstrakcyjne to pojęcia abstrahowane z serii powiązanych obiektów, więc odzwierciedlają wewnętrzną wspólnotę rzeczy; Interfejs to konwencja funkcjonalna zdefiniowana w celu spełniania wywołań zewnętrznych, więc odzwierciedla zewnętrzne cechy rzeczy (6) Interfejs zasadniczo nie posiada żadnych specyficznych cech dziedziczenia, obiecuje jedynie metody, które można wywołać (7) Interfejsy mogą wspierać wywołania zwrotne, ale dziedziczenie nie posiada tej funkcji (8) Konkretne metody zaimplementowane przez klasy abstrakcyjne są domyślnie wirtualne, ale metody interfejsu w klasie implementującej interfejs są domyślnie niewirtualne, oczywiście można je również ogłosić jako wirtualne (9) Jeśli klasa abstrakcyjna implementuje interfejs, metoda w interfejsie może być odwzorowana na klasę abstrakcyjną jako metoda abstrakcyjna bez konieczności jej implementacji, a metoda w interfejsie może być zaimplementowana w podklasie klasy abstrakcyjnej
|