Interfaccia vs classe astratta in Java: qual è la differenza?

Sommario:

Anonim

Cos'è l'interfaccia?

L'interfaccia è un progetto che può essere utilizzato per implementare una classe. L'interfaccia non contiene metodi concreti (metodi che hanno codice). Tutti i metodi di un'interfaccia sono metodi astratti.

Non è possibile creare un'istanza di un'interfaccia. Tuttavia, è possibile creare istanze delle classi che implementano le interfacce. Le interfacce non contengono mai variabili di istanza ma possono contenere variabili finali statiche pubbliche (ad esempio, variabili di classe costanti)

Cos'è la classe astratta?

Una classe che ha la parola chiave abstract nella sua dichiarazione è chiamata classe astratta. Le classi astratte dovrebbero avere almeno un metodo astratto. , cioè metodi senza un corpo. Può avere più metodi concreti.

Le classi astratte ti consentono di creare progetti per classi concrete. Ma la classe che eredita dovrebbe implementare il metodo astratto.

Le classi astratte non possono essere istanziate.

Motivi importanti per l'utilizzo delle interfacce

  • Le interfacce vengono utilizzate per ottenere l'astrazione.
  • Progettato per supportare la risoluzione del metodo dinamico in fase di esecuzione
  • Ti aiuta a ottenere un accoppiamento lento.
  • Consente di separare la definizione di un metodo dalla gerarchia di ereditarietà

Motivi importanti per l'utilizzo di Abstract Class

  • Le classi astratte offrono funzionalità predefinite per le sottoclassi.
  • Fornisce un modello per future classi specifiche
  • Ti aiuta a definire un'interfaccia comune per le sue sottoclassi
  • La classe astratta consente il riutilizzo del codice.

Interfaccia vs. Classe astratta

Una classe astratta consente di creare funzionalità che le sottoclassi possono implementare o sovrascrivere mentre un'interfaccia consente solo di dichiarare la funzionalità ma non di implementarla. Una classe può estendere solo una classe astratta mentre una classe può implementare più interfacce.

Parametri Interfaccia Classe astratta
Velocità Lento Veloce
Eredità multiple Implementa diverse interfacce Solo una classe astratta
Struttura Metodi astratti Metodi astratti e concreti
Quando usare Miglioramento futuro Per evitare l'indipendenza
Ereditarietà / implementazione Una classe può implementare più interfacce La classe può ereditare solo una classe astratta
Implementazione predefinita Mentre si aggiungono nuove cose all'interfaccia, è un incubo trovare tutti gli implementatori e implementare cose appena definite. In caso di Abstract Class, puoi sfruttare l'implementazione predefinita.
Modificatori di accesso L'interfaccia non dispone di modificatori di accesso. Tutto ciò che è definito all'interno dell'interfaccia viene assunto come modificatore pubblico. La classe astratta può avere un modificatore di accesso.
Quando usare È meglio usare l'interfaccia quando varie implementazioni condividono solo la firma del metodo. Gerarchia polimorfica dei tipi di valore. Dovrebbe essere utilizzato quando varie implementazioni dello stesso tipo condividono un comportamento comune.
Campi dati l'interfaccia non può contenere campi dati. la classe può avere campi dati.
Ereditarietà multipla predefinita Una classe può implementare numerose interfacce. Una classe eredita solo una classe astratta.
Implementazione Un'interfaccia è astratta, quindi non può fornire alcun codice. Una classe astratta può fornire un codice predefinito completo che dovrebbe essere sovrascritto.
Uso di modificatori di accesso Non è possibile utilizzare modificatori di accesso per il metodo, le proprietà, ecc. Puoi usare una classe astratta che contiene modificatori di accesso.
Utilizzo Le interfacce aiutano a definire le capacità periferiche di una classe. Una classe astratta definisce l'identità di una classe.
Campi definiti Nessun campo può essere definito Una classe astratta consente di definire sia i campi che le costanti
Eredità Un'interfaccia può ereditare più interfacce ma non può ereditare una classe. Una classe astratta può ereditare una classe e più interfacce.
Costruttore o distruttori Un'interfaccia non può dichiarare costruttori o distruttori. Una classe astratta può dichiarare costruttori e distruttori.
Limite di estensioni Può estendere qualsiasi numero di interfacce. Può estendere solo una classe o una classe astratta alla volta.
Parola chiave astratta In una parola chiave dell'interfaccia astratta, è opzionale per dichiarare un metodo come astratto. In una classe astratta, la parola chiave abstract è obbligatoria per dichiarare un metodo come abstract.
Tipo di classe Un'interfaccia può avere solo metodi astratti pubblici. Una classe astratta ha metodi astratti protetti e pubblici.

Codice di esempio per interfaccia e classe astratta in Java

Di seguito è riportato un codice di esempio per creare un'interfaccia e una classe astratta in Java

Sintassi dell'interfaccia

interface name{//methods}

Esempio di interfaccia Java:

interface Pet {public void test();}class Dog implements Pet {public void test() {System.out.println("Interface Method Implemented");}public static void main(String args[]) {Pet p = new Dog();p.test();}}

Sintassi delle classi astratte

abstract class name{// code}

Esempio di classe astratta:

abstract class Shape {int b = 20;abstract public void calculateArea();}public class Rectangle extends Shape {public static void main(String args[]) {Rectangle obj = new Rectangle();obj.b = 200;obj.calculateArea();}public void calculateArea() {System.out.println("Area is " + (obj.b * obj.b));}}