Abstraktná trieda je taká, ktorá je určená len ako základná trieda iných tried. "Abstraktný" modifikátor sa používa na vytvorenie abstraktnej triedy. Modifikátor abstraktu naznačuje, že existuje nejaká chýbajúca implementácia, ktorá musí byť implementovaná v odvodenej triede. Abstraktná trieda môže mať abstraktné a neabstraktné členy. Abstraktná trieda by mala mať aspoň jednu abstraktnú metódu, v opačnom prípade nie je vhodné vyhlásiť túto triedu za "abstraktnú".
Príklad abstraktnej triedy v C #:
abstraktná trieda MyCircle {abstract public int Area (); } Trieda MyArea: MyCircle {public override int Area () {zadná strana * strana; .....}}1 2 3 4 5 6 7 8 9 10 11 | abstraktná trieda MyCircle {abstract public int Area (); } Trieda MyArea: MyCircle {public override int Area () {zadná strana * strana;, , , , , }} |
Ako je uvedené v predchádzajúcom príklade, abstraktná metóda "Area" vo vnútri triedy MyCircle je v odvodenej triede MyArea prepísaná.
Rozhranie
Rozhranie obsahuje iba vyhlásenie členov vrátane metód, vlastností, udalostí alebo indexátorov. Neobsahuje implementáciu týchto členov. Trieda alebo štruktúra implementuje rozhranie, musí poskytnúť definíciu metód deklarovaných v rozhraní. To znamená, že rozhranie poskytuje štandardnú štruktúru, ktorú musí odvodená trieda sledovať.
Príklad rozhrania v C #:
pomocou System.Collections.Generic; pomocou System.Linq; pomocou System.Text; názov priestoru MyName {public interface MyData {void getdata (); void showdata (); } verejná trieda NameData: MyData {public double getdata () {string name; Console.WriteLine ("Zadajte meno:"); Názov = Console.ReadLine (); } public void showdata () {Console.WriteLine ("Moje meno je:", meno); }}}1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | pomocou systému. Zbierky. Generic; pomocou systému. Linq; pomocou systému. Text; názov priestoru MyName {public interface MyData {void getdata (); void showdata (); } verejná trieda NameData: MyData {public double getdata () {string name; Konzola. WriteLine ("Zadajte meno:"); name = Console. ReadLine (); } public void showdata () {Console. WriteLine ("Moje meno je:", meno); }}} |
Ako je uvedené v príklade vyššie, rozhranie MyData má dve deklarácie metódy getdata () a showdata (). Trieda NameData, ktorá implementuje toto rozhranie, by mala definovať metódy deklarované v rozhraní MyData.
Rozdiel medzi triedou abstraktov a rozhraním
- Abstraktná trieda môže mať abstraktné aj neabstraktné členy. Ale v rozhraní sú všetci členovia implicitne abstraktní a v odvodenej triede musia byť prepísané.
- Trieda môže zdediť niekoľko rozhraní, ale iba jednu abstraktnú triedu.
- Abstraktná trieda môže obsahovať metódy s definíciou alebo s definíciou. Rozhranie však môže obsahovať len podpis metódy.
- Abstraktná trieda môže byť plne, čiastočne alebo vôbec implementovaná, ale rozhranie by malo byť plne implementované, tj všetky členy musia byť definované v odvodenej triede.
- Rozhranie nemôže obsahovať modifikátory prístupu, ale abstraktná trieda môže obsahovať funkcie, vlastnosti alebo udalosti.