Abstraktní třída je ta, která je určena pouze jako základní třída jiných tříd. Modifikátor „abstraktní“ se používá k vytvoření abstraktu třídy. Abstraktní modifikátor označuje, že chybí implementace, která musí být implementována ve třídě odvozené z ní. Abstraktní třída může mít abstraktní a neaktivní členy. Abstraktní třída by měla mít alespoň jednu abstraktní metodu, jinak není použití této třídy deklarováno jako „abstraktní“.
Příklad abstraktní třídy v jazyce C #:
abstraktní třída MyCircle {abstract public int Oblast (); } Třída MyArea: MyCircle {public overide int Area () {return side * side; .....}}1 2 3 4 5 6 7 8 9 10 11 | abstraktní třída MyCircle {abstract public int Oblast (); } Třída MyArea: MyCircle {public overide int Area () {return side * side; . . . . . }} |
Jak je ukázáno ve výše uvedeném příkladu, abstraktní metoda 'Area' uvnitř třídy MyCircle je přepsána v odvozené třídě MyArea.
Rozhraní
Rozhraní obsahuje pouze deklaraci členů včetně metod, vlastností, událostí nebo indexátorů. Neobsahuje implementaci těchto členů. Třída nebo struct implementuje rozhraní, musí poskytnout definici metod deklarovaných v rozhraní. To znamená, že rozhraní poskytuje standardní strukturu, kterou musí odvozená třída následovat.
Příklad rozhraní v C #:
pomocí System.Collections.Generic; pomocí System.Linq; pomocí System.Text; namespace MyName {public interface MyData {void getdata (); void showdata (); } public class NameData: MyData {public double getdata () {název řetězce; Console.WriteLine ("Zadejte název:"); name = Console.ReadLine (); } public void showdata () {Console.WriteLine ("Mé jméno je:", jméno); }}}1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | pomocí systému. Sbírky. Obecný ; pomocí systému. Linq; pomocí systému. Text ; namespace MyName {public interface MyData {void getdata (); void showdata (); } public class NameData: MyData {public double getdata () {název řetězce; Konzola. WriteLine ("Zadejte jméno:"); name = Konzola. ReadLine (); } public void showdata () {Konzole. WriteLine ("Mé jméno je:", jméno); }}} |
Jak je ukázáno ve výše uvedeném příkladu, rozhraní MyData má dvě deklarace metod getdata () a showdata (). Třída NameData, která implementuje toto rozhraní, by měla dát definici metod deklarovaných v rozhraní MyData.
Rozdíl mezi abstraktní třídou a rozhraním
- Abstraktní třída může mít abstraktní i neaktivní členy. V rozhraní jsou však všichni členové implicitně abstraktní a musí být přepsáni v odvozené třídě.
- Třída může zdědit několik rozhraní, ale pouze jednu abstraktní třídu.
- Abstraktní třída může obsahovat metody s definicí nebo s ní. Rozhraní však může obsahovat pouze metodu podpisu.
- Abstraktní třída může být plně, částečně nebo vůbec neimplementována, ale rozhraní by mělo být plně implementováno, tj. Všechny členy musí být definovány v odvozené třídě.
- Rozhraní nemůže obsahovat modifikátory přístupu, ale abstraktní třída jej může mít pro funkce, vlastnosti nebo události.