logo

Tipi di interfacce in Java

In Java le interfacce sono essenziali quando si tratta di stabilire contratti di classe e garantire la coerenza del codice nel regno della programmazione Java. Serve come progetto di una classe delineando una serie di metodi che la classe di implementazione deve implementare. L'astrazione, la modularità e la manutenibilità del codice possono essere ottenute dagli sviluppatori utilizzando le interfacce. IL vari tipi di interfaccia in Java sarà discusso in questa sezione.

Interfacce dei marcatori

Le interfacce marcatori, spesso chiamate interfacce tag, sono interfacce senza alcun metodo dichiarato. In parole povere, servono come marcatori, segnalando che una classe che implementa l'interfaccia marcatore ha particolari proprietà o qualità. L'ambiente runtime Java e altri strumenti utilizzano queste API per fornire funzionalità o dati aggiuntivi. Serializable, Cloneable e Remote sono alcuni esempi di interfacce marker in Java.

Interfacce funzionali

Nell'ambito dei miglioramenti alle espressioni lambda e alla programmazione funzionale, in Java 8 sono state aggiunte interfacce funzionali. Un'interfaccia che ha esattamente un metodo astratto è detta funzionale. Inoltre, sono possibili metodi predefiniti e statici. Molte funzionalità di programmazione funzionale Java, come le espressioni lambda e i riferimenti ai metodi, fanno uso di interfacce funzionali. Predicato, Consumatore, Funzione e Fornitore sono solo alcune delle interfacce funzionali integrate offerte dal pacchetto java.util.function.

Interfacce SAM (Single Abstract Method).

Prima di Java 8, esistevano alcuni tipi di interfacce funzionali chiamate interfacce SAM. Queste interfacce possono avere un numero qualsiasi di metodi predefiniti o statici, ma solo un metodo astratto. Runnable, Comparator e MouseListener sono alcune API precedenti a Java 8 che contengono esempi di interfaccia SAM. Con l'introduzione delle interfacce funzionali in Java 8, le interfacce SAM possono essere utilizzate con espressioni lambda e considerate interfacce funzionali.

Java Ciao mondo esempio

Interfacce normali

Il tipo più diffuso di interfacce in Java sono le interfacce normali. Hanno uno o più metodi astratti che le classi che implementano l'interfaccia devono implementare. A partire da Java 8, le normali interfacce possono contenere inoltre metodi predefiniti e statici. Le interfacce normali vengono utilizzate dagli sviluppatori per specificare le regole o i requisiti che le classi devono seguire. List, Set e Map, che si trovano tutti nel pacchetto java.util, sono esempi di tipiche interfacce Java.

Interfacce di ereditarietà multiple

Java consente alle classi di implementare più interfacce ma non supporta l'ereditarietà di classi multiple. Le interfacce implementate da una classe per definire simultaneamente numerosi contratti o ereditare comportamenti sono note come interfacce di ereditarietà multipla. Una classe può offrire le funzionalità delineate da ciascuna interfaccia implementando diverse interfacce. Con l'aiuto di questa funzionalità, gli sviluppatori possono riutilizzare il codice e aumentare l'adattabilità delle loro idee.

caratteristiche di Java

Ecco alcuni esempi di codice per ciascun tipo di interfaccia in Java insieme al relativo output:

Interfacce dei marcatori

MarkerInterfaceExample.java

 import java.io.Serializable; // Marker Interface interface MyMarkerInterface extends Serializable { } public class MarkerInterfaceExample { public static void main(String[] args) { MyMarkerInterface obj = new MyMarkerInterface() { }; System.out.println(obj instanceof Serializable); // true } } 

Produzione:

 true 

Interfacce funzionali

EsempioInterfacciaFunzionale.java

 import java.util.function.Predicate; public class FunctionalInterfaceExample { public static void main(String[] args) { Predicate isLengthGreaterThan5 = str -> str.length() > 5; System.out.println(isLengthGreaterThan5.test('Hello')); // false System.out.println(isLengthGreaterThan5.test('OpenAI')); // true } } 

Produzione:

 false true 

Interfacce SAM (Single Abstract Method):

SAMInterfaceExample.java

 interface MySAMInterface { void performAction(); } public class SAMInterfaceExample { public static void main(String[] args) { MySAMInterface obj = () -> System.out.println('Performing action'); obj.performAction(); // Performing action } } 

Produzione:

javascript per il menu a discesa
 Performing action 

Interfacce normali

NormalInterfaceExample.java

 import java.util.List; import java.util.ArrayList; interface MyInterface { void printMessage(); } class MyClass implements MyInterface { @Override public void printMessage() { System.out.println('Hello, World!'); } } public class NormalInterfaceExample { public static void main(String[] args) { MyInterface obj = new MyClass(); obj.printMessage(); // Hello, World! } } 

Produzione:

archi in c
 Hello, World! 

Interfacce di ereditarietà multiple:

MultipleInheritanceInterfaceExample.java

 interface Interface1 { void method1(); } interface Interface2 { void method2(); } class MyClass implements Interface1, Interface2 { @Override public void method1() { System.out.println('Method 1'); } @Override public void method2() { System.out.println('Method 2'); } } public class MultipleInheritanceInterfaceExample { public static void main(String[] args) { MyClass obj = new MyClass(); obj.method1(); // Method 1 obj.method2(); // Method 2 } } 

Produzione:

 Method 1 Method 2 

Questi esempi dimostrano l'utilizzo e il comportamento di diversi tipi di interfacce in Java. Puoi eseguire ogni frammento di codice individualmente per osservare l'output corrispondente.

In conclusione, le interfacce Java offrono un potente metodo per specificare i contratti e ottenere la modularità del codice. Le interfacce sono essenziali per lo sviluppo Java, siano esse interfacce marcatore che indicano tratti specifici, interfacce funzionali che consentono la programmazione funzionale, interfacce regolari che definiscono contratti o interfacce di ereditarietà multipla che combinano diversi contratti. Gli sviluppatori Java sono meglio attrezzati per creare codice chiaro ed estendibile quando sono consapevoli dei vari tipi di interfaccia e delle loro funzioni.