Diferența dintre Virtual și Abstract

Virtual vs. Abstract

Virtual și Abstract sunt două cuvinte cheie utilizate în majoritatea limbajelor de programare orientate pe obiecte (OO), cum ar fi Java și C #. Deși există diferențe ușoare în ceea ce înseamnă în diferite limbi, atât cuvintele cheie virtuale cât și cele de cuvinte cheie Abstract oferă un sentiment de implementare parțială entităților la care se leagă.

Rezumat

În mod obișnuit, clasele Abstract, cunoscute și ca Abstract Base Classes (ABC), nu pot fi instanțiate (nu poate fi creată o instanță a acelei clase). Deci, clasele Rezumat sunt semnificative doar dacă limbajul de programare suportă moștenirea (abilitatea de a crea subclase din extinderea unei clase). Clasele abstracte reprezintă, de obicei, un concept abstract sau o entitate cu implementare parțială sau lipsită. Prin urmare, clasele abstracte acționează ca clase de părinți din care derivă clasele copil, astfel încât clasa copil va împărtăși caracteristicile incomplete ale clasei părinte și funcționalitatea poate fi adăugată pentru a le completa. Clasele abstracte pot conține metode Abstract. Subclasele care extind o clasă abstractă pot implementa aceste metode (moștenite) Abstract. Dacă clasa copil implementează toate aceste metode Abstract, este o clasă concretă. Dar dacă nu, clasa copil devine și o clasă abstractă. Ce înseamnă acest lucru este că, atunci când programatorul numește o clasă ca un Rezumat, ea spune că clasa va fi incompletă și va avea elemente care trebuie completate de subclasele de moștenire. Aceasta este o modalitate frumoasă de a crea un contract între doi programatori, ceea ce simplifică sarcinile în dezvoltarea de software. Programatorul, care scrie codul pentru a moșteni, trebuie să urmeze exact definițiile metodei (dar, desigur, poate avea propria implementare). În Java și C #, clasele și metodele Abstract sunt declarate folosind cuvântul cheie abstract.

Deși Abstract și Virtual sunt două cuvinte cheie / concepte care oferă o semnificație a implementării incomplete entităților asociate, ele au diferențele. Metodele abstract (care trebuie definite în clasele Abstract) nu au o implementare deloc, în timp ce metodele virtuale pot avea o implementare. Dacă metodele Abstract sunt extinse printr-o clasă concretă, toate metodele Abstract moștenite trebuie să fie implementate, în timp ce metodele virtuale moștenite pot sau nu să fie suprimate.