Klasa abstrakcyjna to taka, która ma być jedynie klasą bazową innych klas. Modyfikator "abstrakcyjny" służy do abstrakcji klasy. Modyfikator abstrakcyjny wskazuje, że istnieje brakująca implementacja, która musi zostać zaimplementowana w klasie pochodnej. Klasa abstrakcyjna może mieć abstrakcyjnych i nie abstrakcyjnych członków. Klasa abstrakcyjna powinna mieć co najmniej jedną metodę abstrakcyjną, w przeciwnym razie nie ma sensu deklarowanie tej klasy jako "abstrakcyjnej".
Przykład klasy abstrakcyjnej w języku C #:
Klasa abstrakcyjna MyCircle {abstract public int Area (); } Class MyArea: MyCircle {public override int Area () {strona powrotu * strona; .....}}1 2 3 4 5 6 7 8 9 10 11 | Klasa abstrakcyjna MyCircle {abstract public int Area (); } Class MyArea: MyCircle {public override int Area () {strona powrotu * strona; . . . . . }} |
Jak pokazano w powyższym przykładzie, abstrakcyjna metoda "Obszar" w klasie MyCircle jest nadpisywana w klasie pochodnej MyArea.
Berło
Interfejs zawiera tylko deklarację członków, w tym metody, właściwości, zdarzenia lub indeksatory. Nie zawiera implementacji tych członków. Klasa lub struktura implementuje interfejs, musi podać definicję metod zadeklarowanych w interfejsie. Oznacza to, że interfejs zapewnia standardową strukturę, której musi przestrzegać klasa pochodna.
Przykład interfejsu w języku C #:
przy użyciu System.Collections.Generic; przy użyciu System.Linq; using System.Text; namespace MyName {interfejs publiczny MyData {void getdata (); void showdata (); } public class NameData: MyData {public double getdata () {nazwa łańcucha; Console.WriteLine ("Enter the name:"); name = Console.ReadLine (); } public void showdata () {Console.WriteLine ("Moje imię to:", nazwa); }}}1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | przy użyciu systemu. Kolekcje. Rodzajowy ; przy użyciu systemu. Linq; przy użyciu systemu. Tekst; namespace MyName {interfejs publiczny MyData {void getdata (); void showdata (); } public class NameData: MyData {public double getdata () {nazwa łańcucha; Konsola. WriteLine ("Wprowadź nazwę:"); name = Console. Czytaj linię ( ) ; } public void showdata () {Console. WriteLine ("Moje imię to:", nazwa); }}} |
Jak pokazano w powyższym przykładzie interfejs MyData ma dwie deklaracje metody getdata () i showdata (). Klasa NameData, która implementuje ten interfejs, powinna podać definicję metod zadeklarowanych w interfejsie MyData.
Różnica między klasą abstrakcyjną a interfejsem
- Klasa abstrakcyjna może zawierać elementy abstrakcyjne i nie abstrakcyjne. Ale w interfejsie wszyscy członkowie są niejawnie abstrakcyjni i muszą zostać nadpisani w klasie pochodnej.
- Klasa może dziedziczyć kilka interfejsów, ale tylko jedną klasę abstrakcyjną.
- Klasa abstrakcyjna może zawierać metody z definicją lub z nią zdefiniowaną. Ale interfejs może zawierać tylko sygnaturę metody.
- Klasa abstrakcyjna może w pełni, częściowo lub wcale nie zostać zaimplementowana, ale interfejs powinien zostać w pełni zaimplementowany, tzn. Wszyscy członkowie muszą być zdefiniowani w klasie pochodnej.
- Interfejs nie może zawierać modyfikatorów dostępu, ale klasa abstrakcyjna może je zawierać dla funkcji, właściwości lub zdarzeń.