Clase abstracte și interfețe Asemănări: (1) poate fi moștenit (2) nu poate fi instanțiat (3) poate conține declarații de metodă (4) Clasa derivată trebuie să implementeze metoda neimplementată Categorie: (1) Clasele de bază abstracte pot defini câmpuri, proprietăți și implementări de metode. Interfețele pot defini doar atribute, indexatori, evenimente și declarații de metodă și nu pot conține câmpuri. (2) O clasă abstractă este o clasă incompletă care necesită rafinări suplimentare, în timp ce o interfață este o normă comportamentală. Interfețele personalizate Microsoft vin întotdeauna cu un câmp capabil să demonstreze că sunt expresii ale expresiei "Pot să o fac..." ” (3) Interfețele pot fi implementate de mai multe ori, iar clasele abstracte pot fi moștenite doar de o singură persoană (4) Clasele abstracte sunt mai bine definite între o serie de clase strâns înrudite, în timp ce majoritatea interfețelor sunt clase vag înrudite care implementează toate o anumită funcție (5) Clasele abstracte sunt concepte abstractizate dintr-o serie de obiecte înrudite, astfel încât reflectă comunalitatea internă a lucrurilor; O interfață este o convenție funcțională definită pentru a satisface apelurile externe, deci reflectă caracteristicile externe ale lucrurilor (6) Interfața practic nu are caracteristici specifice de moștenire, promite doar metode care pot fi numite (7) Interfețele pot fi folosite pentru a suporta callback-uri, dar moștenirea nu are această caracteristică (8) Metodele specifice implementate de clasele abstracte sunt virtuale implicit, dar metodele de interfață din clasa care implementează interfața sunt nevirtuale implicit, desigur, le poți declara virtuale (9) Dacă o clasă abstractă implementează o interfață, metoda din interfață poate fi mapată la clasa abstractă ca metodă abstractă fără a fi nevoie să o implementeze, iar metoda din interfață poate fi implementată într-o subclasă a clasei abstracte
|