Differenza tra Abstract Class e Interface in Java

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.

Cos'è una classe astratta in Java?

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.

Cos'è un'interfaccia?

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.

Differenza tra Abstract Class e Interface in Java

  1. "Multiple Ereditarietà" di Abstract Class e Interface in Java - Nonostante il fatto che sia la classe astratta sia l'interfaccia siano utilizzate principalmente per l'astrazione, sono piuttosto diverse l'una dall'altra. Mentre una classe astratta è una classe, un'interfaccia è un'interfaccia. Significa che mentre un'interfaccia può estendere solo un'altra interfaccia Java, una classe astratta può implementare più ereditarietà in Java. Bene, Java non supporta più ereditarietà, ma è possibile implementare più eredità in Java.
  2. "Metodo tipo" di classe astratta e interfaccia in Java - La seconda grande differenza tra i due è che mentre un'interfaccia può avere solo metodi astratti, una classe astratta può avere sia metodi astratti che non astratti. Tuttavia, dal momento che Java 8, un'interfaccia può avere anche metodi predefiniti e statici.
  3. "Modificatori di accesso" di Classe astratta e Interfaccia in Java - Una classe astratta può avere modificatori di accesso pubblici, privati ​​e protetti, tuttavia i metodi di un'interfaccia sono implicitamente pubblici e astratti. Non puoi usare nessun altro modificatore di accesso con i metodi di interfaccia '.
  4. "Implementazione" di Abstract Class e Interface in Java - Una classe astratta può fornire l'implementazione di un'interfaccia. Un'interfaccia, d'altra parte, non può fornire l'implementazione di una classe astratta.
  5. "Parola chiave" di classe astratta e interfaccia in Java- Mentre la parola chiave "astratta" viene usata per dichiarare un metodo astratto di classe come astratto, tuttavia, le interfacce sono interamente una storia diversa; possono avere solo costanti finali statiche pubbliche e dichiarazioni di metodo.
  6. "Uso" di Abstract Class e Interface in Java - Mentre un'interfaccia è ideale per la dichiarazione del tipo, una classe astratta è più adatta per la riusabilità del codice e la prospettiva dell'evoluzione. Un'interfaccia appare come una classe, ma non è una classe.
  7. "Affidabilità" di Abstract Class e Interface in Java- Un'altra importante differenza tra una classe astratta e un'interfaccia è che il primo è un po 'più veloce del secondo perché solitamente una ricerca è coinvolta in un'interfaccia prima che qualsiasi metodo sottoposto a override venga chiamato in Java.
  8. "Variabili finali" di Classe astratta e Interfaccia in Java - Le variabili dichiarate in un'interfaccia sono definitive per impostazione predefinita, mentre una classe astratta può contenere o meno variabili non definitive.

Abstract Class vs Interface in Java: Tabella di confronto

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.

Punti riassuntivi su Abstract Class e Interface in Java

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 è.