Μια αφηρημένη τάξη είναι αυτή που προορίζεται μόνο να είναι μια βασική κατηγορία άλλων τάξεων. Ο «αφηρημένος» τροποποιητής χρησιμοποιείται για να κάνει μια αφηρημένη κλάση. Ένας αφηρημένος τροποποιητής δηλώνει ότι υπάρχει κάποια υλοποίηση που λείπει που πρέπει να εφαρμοστεί στην κλάση που προέρχεται από αυτό. Η αφηρημένη τάξη μπορεί να έχει αφηρημένα και μη αφηρημένα μέλη. Μια αφηρημένη κλάση θα πρέπει να έχει τουλάχιστον μία αφηρημένη μέθοδο, διαφορετικά, δεν υπάρχει καμία χρήση της δήλωσης αυτής της τάξης ως «αφηρημένης».
Παράδειγμα αφηρημένης κλάσης σε C #:
αφηρημένη κλάση MyCircle {abstract public int Area (); } Κατηγορία MyArea: MyCircle {public override int Περιοχή () {πλευρά επιστροφής * πλευρά; .....}}1 2 3 4 5 6 7 8 9 10 11 | αφηρημένη κλάση MyCircle {abstract public int Area (); } Κατηγορία MyArea: MyCircle {public override int Περιοχή () {πλευρά επιστροφής * πλευρά; . . . . . }} |
Όπως φαίνεται στο παραπάνω παράδειγμα, η αφηρημένη μέθοδος 'Area' μέσα στην κλάση MyCircle υπερισχύει στην παράγωγη κλάση MyArea.
Διεπαφή
Μια διεπαφή περιέχει μόνο τη δήλωση των μελών, συμπεριλαμβανομένων των μεθόδων, των ιδιοτήτων, των συμβάντων ή των ευρετηρίων. Δεν περιλαμβάνει την εφαρμογή αυτών των μελών. Μια κλάση ή δομή υλοποιεί τη διασύνδεση, πρέπει να παρέχει τον ορισμό των μεθόδων που δηλώνονται στη διασύνδεση. Αυτό σημαίνει ότι μια διεπαφή παρέχει μια τυποποιημένη δομή που πρέπει να ακολουθήσει η παράγωγη κλάση.
Παράδειγμα διεπαφής στο C #:
χρησιμοποιώντας System.Collections.Generic; χρησιμοποιώντας System.Linq. χρησιμοποιώντας System.Text; όνομα χώρου MyName {δημόσιο περιβάλλον MyData {void getdata (); void showdata (); } δημόσιες τάξεις NameData: MyData {public double getdata () {string όνομα; Console.WriteLine ("Εισαγάγετε το όνομα:"); όνομα = Console.ReadLine (); } public void showdata () {Console.WriteLine ("Το όνομά μου είναι:", όνομα); }}}1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | χρησιμοποιώντας το σύστημα. Συλλογές. Generic; χρησιμοποιώντας το σύστημα. Linq; χρησιμοποιώντας το σύστημα. Κείμενο. όνομα χώρου MyName {δημόσιο περιβάλλον MyData {void getdata (); void showdata (); } δημόσιες τάξεις NameData: MyData {public double getdata () {string όνομα; Κονσόλα. WriteLine ("Εισαγάγετε το όνομα:"); όνομα = Κονσόλα. ReadLine (); } public void showdata () {Console. WriteLine ("Το όνομά μου είναι:", όνομα); }}} |
Όπως φαίνεται στο παραπάνω παράδειγμα, η διεπαφή MyData έχει δύο δήλωση μεθόδου getdata () και showdata (). Η κλάση NameData που εφαρμόζει αυτή τη διασύνδεση πρέπει να δώσει τον ορισμό των μεθόδων που δηλώνονται στη διασύνδεση MyData.
Διαφορά μεταξύ κατηγορίας αφηρημένων και διεπαφής
- Μια αφηρημένη τάξη μπορεί να έχει αφηρημένα αλλά και μη αφηρημένα μέλη. Όμως, σε μια διεπαφή, όλα τα μέλη είναι σιωπηρά αφηρημένα και πρέπει να αντικατασταθούν από την παράγωγη τάξη.
- Μια τάξη μπορεί να κληρονομήσει αρκετές διεπαφές αλλά μόνο μία αφηρημένη τάξη.
- Μια αφηρημένη κλάση μπορεί να περιέχει μεθόδους με ή με ορισμό. Όμως, μια διεπαφή μπορεί να περιέχει μόνο υπογραφή μεθόδου.
- Μια αφηρημένη κλάση μπορεί πλήρως, εν μέρει ή να μην εφαρμοστεί καθόλου, αλλά μια διεπαφή πρέπει να εφαρμοστεί πλήρως, δηλαδή όλα τα μέλη πρέπει να οριστούν στην κλάση που προέρχεται.
- Μια διεπαφή δεν μπορεί να περιέχει τροποποιητές πρόσβασης, αλλά μια αφηρημένη κλάση μπορεί να τις έχει για λειτουργίες, ιδιότητες ή συμβάντα.