Qual è la differenza tra Abstract Class e Interface in Java?



Questo articolo ti aiuterà a capire la differenza chiave tra la classe astratta e l'interfaccia in java con l'aiuto di un programma di esempio.

Le classi e le interfacce astratte sono i due elementi costitutivi principalidel . Sebbene entrambi siano usati principalmente per l'astrazione, sono molto diversi l'uno dall'altro e non possono essere usati in modo intercambiabile. In questo articolo vediamo qual è la differenza tra la classe astratta e l'interfaccia in Java.

Gli argomenti discussi in questo articolo sono i seguenti:





Per comprendere le differenze tra la classe astratta e l'interfaccia in , devi sapere cos'è una classe astratta e cos'è un'interfaccia. Quindi, iniziamo discutendo di cosa sono.

Cos'è la classe astratta in Java?

In qualsiasi linguaggio di programmazione, astrazione significa nascondere i dettagli irrilevanti all'utente per concentrarsi solo sui dettagli essenziali per aumentare l'efficienza riducendo così la complessità. In Java, l'astrazione si ottiene utilizzando classi astratte . Una classe astratta cattura le caratteristiche comuni delle sottoclassi e può contenere o meno alcun metodo astratto. Non può essere istanziato ma può essere utilizzato solo come superclasse dalle sue sottoclassi. Ecco un esempio di programma che mostra una lezione astratta:



Nota: Un metodo astratto , è un metodo che non è implementato sul posto e aggiungeincompletezza a classe .

come usare i socket in java
pacchetto MyPackage // classe astratta classe astratta Animal {String AnimalName = '' Animal (String name) {this.AnimalName = name} // dichiara metodi non astratti // ha un'implementazione predefinita public void BasicInfo (String details) {System. out.println (this.AnimalName + '' + details)} // metodi astratti che saranno // implementati dalla sua sottoclasse abstract public void habitat () abstract public void respiration ()} class Terrestrial extends Animal {// costruttore Terrestrial (String name) {super (name)} @Override public void habitat () {System.out.println ('leave on land and')} @Override public void respiration () {System.out.println ('respire attraverso i polmoni o la trachea. ')}} class Aquatic extends Animal {// constructor Aquatic (String name) {super (name)} @Override public void habitat () {System.out.println (' It leaves in water and ') } @Override public void respiration () {System.out.println ('respire through gills or their skin.')}} Class AbstractClassDemo {public static voi d main (String [] args) {// creazione della classe Object of Terrestrial // e utilizzo del riferimento alla classe Animal. Animal object1 = new Terrestrial ('Humans') object1.BasicInfo ('are terrestrial being, they') object1.habitat () object1.respiration () System.out.println ('') // creazione degli oggetti della classe circle Animal object2 = new Aquatic ('Fishes') object2.BasicInfo ('sono esseri acquatici, loro') object2.habitat () object2.respiration ()}}

Produzione

Gli esseri umani sono esseri terrestri, partono sulla terra e respirano attraverso i polmoni o la trachea. I pesci sono esseri acquatici, lasciano l'acqua e respirano attraverso le branchie o la pelle.

Il BasicInfo() è un metodo condiviso da Terrestre e Acquatico classi. Da Classe animale non può essere avviato, stiamo creando gli oggetti di Terrestre e Acquatico classi a scopo di programmazione. Successivamente, abbiamo le interfacce.



Interfaccia in Java

Un altro modo per ottenere astrazione in Java sta usando interfacce .Un'interfaccia è una raccolta di metodi astratti, non ha alcun concreto , a differenza di una classe astratta. Ma a differenza della classe astratta, un'interfaccia fornisce un'astrazione completa in Java. Può avere metodi e variabili proprio come una classe. Tuttavia, i metodi dichiarati in un'interfaccia sono astratti per impostazione predefinita.Ecco un file dimostrazione della classe astratta:

pacchetto MyPackage interfaccia Animals {// abstract methods void habitat () void respiration ()} class TerrestrialA implementa Animals {String AnimalName = '' // constructor TerrestrialA (String name) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'leave on land and')} @Override public void respiration () {System.out.println ('respire through lungs or trachea.')}} Class AquaticA implementa Animals {String AnimalName = '' // constructor AquaticA (String name) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'leave in water and')} @Override public void respiration () {System.out.println ('respire through gills or their skin.')}} Class JavaInterfaceDemo {public static void main (String [] args) {// creazione della classe Object of Terrestrial // e utilizzo del riferimento alla classe Animal . Animals object1 = new TerrestrialA ('Humans') object1.habitat () object1.respiration () System.out.println ('') // creazione degli oggetti della classe circle Animals object2 = new AquaticA ('Fishes') object2.habitat () object2.respiration ()}}

Produzione

Gli esseri umani escono sulla terra e respirano attraverso i polmoni o la trachea. I pesci escono nell'acqua e respirano attraverso le branchie o la loro pelle.

Se non hai alcun codice comune tra i tuoi file classi , quindi puoi andare per l'interfaccia. Un'interfaccia è più simile a un progetto di una classe poiché non ha metodi non astratti.

Dal contenuto di cui sopra, potresti aver notato la differenza fondamentale tra la classe astratta e l'interfaccia in . Che è, a differenza della classe astratta, un'interfaccia fornisce full astrazione in Java. Ora andiamo avanti ed elenchiamo altre differenze.

Classe astratta vs interfaccia

La tabella seguente elenca le principali differenze tra la classe astratta e l'interfaccia.

Parametro Classe astratta Interfaccia

Implementazione del metodo predefinito

Può avere l'implementazione del metodo predefinito

Le interfacce forniscono pura astrazione e non possono avere alcuna implementazione

Variabili

Può contenere variabili non finali.

Le variabili dichiarate in un'interfaccia sono per impostazione predefinita final

Parola chiave utilizzata

Una classe astratta può essere estesa utilizzando la parola chiave 'extends

L'interfaccia dovrebbe essere implementata utilizzando la parola chiave ïmplements

Modificatori di accesso

Puòhanno modificatori pubblici, protetti, privati ​​e predefiniti

I metodi dell'interfaccia sono pubblici per impostazione predefinita. non puoi usare nessun altro modificatore di accesso con esso

Velocità di implementazione

È più veloce dell'interfaccia

Un'interfaccia è un po 'più lenta e richiede un ulteriore riferimento indiretto

Classe normale

Può estendere solo una classe astratta

Può implementare più interfacce

come creare un array di oggetti

Costruttori

Una classe astratta può avere costruttori

Un'interfaccia non può avere costruttori

Ereditarietà multipla

Una classe astratta può estendere un'altra classe e può implementare più interfacce Java

L'interfaccia può estendere solo un'altra interfaccia Java

Bene, ora sono le principali differenze tra la classe astratta e l'interfaccia in Java. Ma come decidi quando utilizzare quale di questi due?

Quando utilizzare la classe astratta e quando utilizzare l'interfaccia?

Prendi in considerazione l'utilizzo di classi astratte nei seguenti casi:

  • Se hai alcune classi correlate che devono condividere il file stesse righe di codice
  • Quando vuoi definire il file campi non statici o non finali
  • Quando ci sonometodi o campio richiedere modificatori di accesso diverso dal pubblico (come protetto e privato)

Considerare l'utilizzo di interfacce nei seguenti casi:

  • Quando vuoi ottenere pura astrazione
  • Se vuoi assumere multiple , cioèimplementare più di un'interfaccia
  • Quando si desidera specificare il comportamento di un particolare tipo di dati, ma non preoccuparsi di chi implementa il suo comportamento.

Questo ci porta alla fine di questo articolo. Ho coperto una delle domande Java più frequenti in Interview, che è la differenza tra la classe astratta e l'interfaccia in Java.

Assicurati di esercitarti il ​​più possibile e di ripristinare la tua esperienza.

Controlla il da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Siamo qui per aiutarti in ogni fase del tuo viaggio, per diventare oltre a queste domande di intervista Java, abbiamo creato un curriculum progettato per studenti e professionisti che vogliono essere uno sviluppatore Java.

Hai domande per noi? Si prega di menzionarlo nella sezione commenti di questa 'interfaccia Java Map' articolo e ti risponderemo il prima possibile.