Sia la classe astratta che l'interfaccia sono utilizzate principalmente per l'astrazione, tuttavia sono molto diverse l'una dall'altra. Entrambi sono parte integrante di Java, ma hanno i propri usi delle applicazioni. Sebbene entrambi i termini possano essere sinonimi, non possono essere usati in modo intercambiabile.
Ci sono differenze significative tra i due. Mentre un metodo di interfaccia è astratto per impostazione predefinita, un abstract può contenere sia metodi astratti che non astratti. Bene, dal momento che Java 8, le interfacce hanno implementazioni di metodo e possono avere sia metodi statici che predefiniti in Java. Studiamo la differenza tra i due in dettaglio.
Una classe astratta in Java è una classe dichiarata astratta - può contenere o meno metodi astratti. È abbastanza simile a un'interfaccia Java, tranne per il fatto che può contenere l'implementazione del metodo predefinito. Come nella programmazione orientata agli oggetti, l'astrazione in Java è ottenuta utilizzando classi e interfacce astratte. In Java, l'astrazione significa nascondere i dettagli irrilevanti all'utente per concentrarsi solo sui dettagli essenziali per aumentare l'efficienza riducendo la complessità. La parola chiave "abstract" viene utilizzata per creare una classe astratta poco prima della parola chiave class nella dichiarazione della classe.
Una classe astratta può contenere o meno metodi di astrazione (metodi senza corpo), ma se una classe ha almeno un metodo di astrazione, deve essere dichiarata astratta. Tuttavia, i metodi non astratti possono essere utilizzati anche solo in una classe astratta, ma solo per implementare il comportamento predefinito. I metodi in una classe astratta possono avere modificatori di accesso come privati, pubblici, statici e protetti, a seconda del livello di visibilità. Una classe astratta non può essere istanziata e non fornisce un'astrazione al 100% a causa del fatto che può avere un metodo concreto.
Un'interfaccia però sembra una classe, non lo è. Poiché Java non supporta ereditarietà multiple, a volte un'interfaccia è ideale per fornire una base per la gerarchia di classi. Un'interfaccia è più di un progetto di una classe che viene anche utilizzata per ottenere l'astrazione in Java. Contiene metodi astratti e costanti statiche. In termini semplici, un'interfaccia è una raccolta di metodi astratti che viene utilizzata per specificare un comportamento che la classe deve implementare. A differenza della classe astratta, un'interfaccia fornisce la completa astrazione in Java. Può avere sia metodi che variabili come una classe, tuttavia i metodi dichiarati nell'interfaccia sono astratti per impostazione predefinita.
Classe astratta | Interfaccia |
La parola chiave astratta viene utilizzata per creare una classe astratta e può essere utilizzata con metodi. | La parola chiave Interface viene utilizzata per creare un'interfaccia ma non può essere utilizzata con i metodi. |
Una classe può estendere solo una classe astratta. | Una classe può implementare più di un'interfaccia. |
Una classe astratta può avere sia metodi astratti che non astratti. | Un'interfaccia può avere solo metodi astratti. |
Le variabili non sono definitive di default. Può contenere variabili non definitive. | Le variabili sono definitive per impostazione predefinita in un'interfaccia. |
Una classe astratta può fornire l'implementazione di un'interfaccia. | Un'interfaccia non può fornire l'implementazione di una classe astratta. |
Può avere metodi con implementazioni. | Fornisce un'astrazione assoluta e non può avere implementazioni di metodo. |
Può avere modificatori di accesso pubblici, privati, statici e protetti. | I metodi sono implicitamente pubblici e astratti nell'interfaccia Java. |
Non supporta più ereditarietà. | Supporta più eredità. |
È ideale per il riutilizzo del codice e la prospettiva dell'evoluzione. | È ideale per la dichiarazione di tipo. |
Sia la classe astratta che l'interfaccia sono utilizzate per l'astrazione; tuttavia, hanno la loro giusta quota di differenze. La principale differenza tra i due è guidata dai metodi di astrazione. Mentre il primo può o non può avere metodi astratti, il secondo è implicitamente astratto. Una classe astratta può avere sia metodi astratti che non astratti. Un'interfaccia, d'altra parte, può avere solo metodi astratti, quindi non possono avere implementazione, il che significa semplicemente che un'interfaccia non può avere metodi non astratti. Una classe astratta non può essere istanziata che vieta la creazione di un oggetto. Un'interfaccia, d'altra parte, può sembrare una classe, ma non lo è.