logo

Typer av gränssnitt i Java

I Java är gränssnitt väsentliga när det gäller att sätta klasskontrakt och garantera kodkonsistens inom Java-programmering. Den fungerar som en klass ritning genom att beskriva ett antal metoder som den implementerande klassen måste implementera. Abstraktionen, modulariteten och underhållbarheten av deras kod kan alla uppnås av utvecklare genom att använda gränssnitt. De olika gränssnittstyper i Java kommer att diskuteras i detta avsnitt.

Markörgränssnitt

Markörgränssnitt, ofta kallade tagggränssnitt, är gränssnitt utan några deklarerade metoder. Enkelt sagt fungerar de som markörer, vilket signalerar att en klass som implementerar markörgränssnittet har särskilda egenskaper eller kvaliteter. Java runtime-miljön och andra verktyg använder dessa API:er för att leverera extra funktionalitet eller data. Serialiserbar, Klonbar och Remote är några instanser av markörgränssnitt i Java.

Funktionella gränssnitt

Som en del av förbättringarna av lambda-uttryck och funktionell programmering lades funktionella gränssnitt till Java 8. Ett gränssnitt som har just en abstrakt metod sägs vara funktionellt. Dessutom är standardmetoder och statiska metoder möjliga. Många Java-funktionella programmeringsmöjligheter, som lambda-uttryck och metodreferenser, använder sig av funktionella gränssnitt. Predikat, Konsument, Funktion och Leverantör är bara några av de inbyggda funktionella gränssnitten som erbjuds av java.util.function-paketet.

Single Abstract Method (SAM)-gränssnitt

Före Java 8 fanns det vissa typer av funktionella gränssnitt som kallas SAM-gränssnitt. Dessa gränssnitt kan ha valfritt antal standardmetoder eller statiska metoder, men bara en abstrakt metod. Runnable, Comparator och MouseListener är några pre-Java 8 API:er som innehåller SAM-gränssnittsexempel. Med introduktionen av funktionella gränssnitt i Java 8 kan SAM-gränssnitt användas med lambda-uttryck och betraktas som funktionella gränssnitt.

ascii tabell java

Normala gränssnitt

Den vanligaste typen av gränssnitt i Java är normala gränssnitt. De har en eller flera abstrakta metoder som klasserna som implementerar gränssnittet måste implementera. Från och med Java 8 kan normala gränssnitt dessutom innehålla standardmetoder och statiska metoder. Normala gränssnitt används av utvecklare för att specificera de regler eller krav som klasser måste följa. Lista, Set och Map, som alla finns i paketet java.util, är exempel på typiska Java-gränssnitt.

Flera arvsgränssnitt

fizzbuzz java

Java tillåter klasser att implementera flera gränssnitt men stöder inte arv av flera klasser. Gränssnitt som implementeras av en klass för att samtidigt definiera flera kontrakt eller ärva beteende är kända som multipla arvsgränssnitt. En klass kan erbjuda den funktionalitet som beskrivs av varje gränssnitt genom att implementera flera gränssnitt. Med hjälp av denna funktionalitet kan utvecklare återanvända kod och öka anpassningsförmågan hos sina idéer.

Här är exempel på kod för varje typ av gränssnitt i Java tillsammans med deras motsvarande utdata:

Markörgränssnitt

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

Produktion:

 true 

Funktionella gränssnitt

Functional InterfaceExample.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 } } 

Produktion:

 false true 

SAM-gränssnitt (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 } } 

Produktion:

hashing i datastruktur
 Performing action 

Normala gränssnitt

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! } } 

Produktion:

grundläggande java-intervjufrågor
 Hello, World! 

Flera arvsgränssnitt:

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

Produktion:

 Method 1 Method 2 

Dessa exempel visar användningen och beteendet hos olika typer av gränssnitt i Java. Du kan köra varje kodavsnitt individuellt för att observera motsvarande utdata.

Sammanfattningsvis erbjuder Java-gränssnitt en potent metod för att specificera kontrakt och uppnå kodmodularitet. Gränssnitt är väsentliga för Java-utveckling, oavsett om de är markörgränssnitt som indikerar specifika egenskaper, funktionella gränssnitt som möjliggör funktionell programmering, vanliga gränssnitt som definierar kontrakt eller flera arvsgränssnitt som kombinerar flera kontrakt. Java-utvecklare är bättre rustade att bygga tydlig, utbyggbar kod när de är medvetna om de olika gränssnittstyperna och deras funktioner.