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));}}