Differenza tra classe astratta ed ereditarietà

Classe astratta rispetto all'eredità

Classe astratta ed ereditarietà sono due importanti concetti orientati agli oggetti che si trovano in molti linguaggi di programmazione orientati agli oggetti come Java. La classe astratta può essere considerata una versione astratta di una classe regolare (concreta), mentre l'ereditarietà consente alle nuove classi di estendere altre classi. La classe astratta è una classe che non può essere inizializzata ma può essere estesa. Quindi, le classi astratte hanno significato solo se il linguaggio di programmazione supporta l'ereditarietà. In Java, le classi astratte vengono dichiarate usando la parola chiave Abstract, mentre la parola chiave Extends viene utilizzata per ereditare da una (super) classe.

Cos'è la classe astratta?

In genere, le classi astratte, note anche come Abstract Base Classes (ABC), non possono essere istanziate (non è possibile creare un'istanza di quella classe). Quindi, le classi astratte hanno significato solo se il linguaggio di programmazione supporta l'ereditarietà (capacità di creare sottoclassi dall'estensione di una classe). Le classi astratte di solito rappresentano un concetto astratto o un'entità con un'implementazione parziale o nessuna. Pertanto, le classi Abstract agiscono come classi parent da cui derivano le classi secondarie in modo che la classe figlio condivida le funzionalità incomplete della classe padre e sia possibile aggiungere funzionalità per completarle.

Le classi astratte possono contenere metodi astratti. Sottoclassi che estendono una classe astratta possono implementare questi metodi astratti (ereditati). Se la classe bambino implementa tutti questi metodi astratti, è una classe concreta. Ma se così non fosse, anche la classe bambino diventerà una classe astratta. Ciò che significa tutto questo è che, quando il programmatore nomina una classe come Abstract, sta dicendo che la classe sarà incompleta e che avrà elementi che devono essere completati dalle sottoclassi ereditarie. Questo è un buon modo per creare un contratto tra due programmatori, che semplifica le attività nello sviluppo del software. Il programmatore, che scrive il codice da ereditare, deve seguire esattamente le definizioni del metodo (ma ovviamente può avere la sua implementazione).

Cos'è l'ereditarietà?

L'ereditarietà è un concetto orientato agli oggetti, che consente alle nuove classi di estendere altre classi. Estende la parola chiave viene utilizzata per implementare il concetto di ereditarietà nel linguaggio di programmazione Java. L'ereditarietà fornisce essenzialmente il riutilizzo del codice consentendo l'estensione delle proprietà e del comportamento di una classe esistente da una classe appena definita. Quando una nuova sottoclasse (o classe derivata) estende una super classe (o classe genitore) che la sottoclasse erediterà tutti gli attributi e i metodi della super classe. La sottoclasse può facoltativamente sovrascrivere il comportamento (fornire funzionalità nuove o estese ai metodi) ereditato dalla classe genitore. In genere, una sottoclasse non può estendere più super classi (ad es. In Java). Pertanto, non è possibile utilizzare estensioni per ereditarietà multipla. Per avere ereditarietà multiple, è necessario utilizzare le interfacce.

Qual è la differenza tra Abstract Class ed Ereditarietà?

Le classi astratte di solito rappresentano un concetto astratto o un'entità con implementazione parziale o assente. L'ereditarietà consente alle nuove classi di estendere altre classi. Perché, le classi astratte non possono essere istanziate, è necessario utilizzare il concetto di ereditarietà per utilizzare le classi astratte. Altrimenti, una classe astratta non ha senso. Le classi astratte possono contenere metodi astratti e quando la classe viene estesa, tutti i metodi (astratti e concreti) vengono ereditati. La classe ereditata può implementare uno o tutti i metodi. Se tutti i metodi astratti non sono implementati, allora anche quella classe diventa una classe astratta. Una classe non può ereditare da più di una classe astratta (questa non è una qualità delle classi astratte in sé, ma piuttosto una restrizione dell'ereditarietà).