logo

Видове интерфейси в Java

В Java интерфейсите са от съществено значение, когато става въпрос за задаване на договори за класове и гарантиране на последователност на кода в сферата на програмирането на Java. Той служи като план на клас, като очертава редица методи, които изпълняващият клас трябва да приложи. Абстракцията, модулността и поддръжката на техния код могат да бъдат постигнати от разработчиците чрез използване на интерфейси. The различни типове интерфейси в Java ще бъдат обсъдени в този раздел.

Маркерни интерфейси

Маркерните интерфейси, често наричани таг интерфейси, са интерфейси без декларирани методи. Просто казано, те служат като маркери, сигнализиращи, че клас, който имплементира интерфейса на маркера, има определени свойства или качества. Средата за изпълнение на Java и други инструменти използват тези API за предоставяне на допълнителна функционалност или данни. Serializable, Cloneable и Remote са някои екземпляри на маркерни интерфейси в Java.

Функционални интерфейси

Като част от подобренията на ламбда изразите и функционалното програмиране, функционални интерфейси бяха добавени към Java 8. Интерфейс, който има точно един абстрактен метод, се нарича функционален. Освен това са възможни методи по подразбиране и статични. Много възможности за функционално програмиране на Java, като ламбда изрази и препратки към методи, използват функционални интерфейси. Предикат, Потребител, Функция и Доставчик са само някои от вградените функционални интерфейси, предлагани от пакета java.util.function.

Интерфейси на единичен абстрактен метод (SAM).

Преди Java 8 имаше определени видове функционални интерфейси, наречени SAM интерфейси. Тези интерфейси могат да имат произволен брой методи по подразбиране или статични, но само един абстрактен метод. Runnable, Comparator и MouseListener са няколко API преди Java 8, които съдържат примери за SAM интерфейс. С въвеждането на функционални интерфейси в Java 8, SAM интерфейсите могат да се използват с ламбда изрази и да се считат за функционални интерфейси.

обект към json в java

Нормални интерфейси

Най-разпространеният вид интерфейси в Java са нормалните интерфейси. Те имат един или повече абстрактни методи, които класовете, които имплементират интерфейса, трябва да имплементират. Започвайки с Java 8, нормалните интерфейси могат допълнително да съдържат методи по подразбиране и статични. Нормалните интерфейси се използват от разработчиците, за да определят правилата или изискванията, които класовете трябва да следват. List, Set и Map, всички от които се намират в пакета java.util, са примери за типични интерфейси на Java.

Множество интерфейси за наследяване

Java позволява на класовете да реализират множество интерфейси, но не поддържа наследяване на множество класове. Интерфейсите, които се изпълняват от клас за едновременно дефиниране на множество договори или наследяване на поведение, са известни като интерфейси за множествено наследяване. Един клас може да предложи функционалността, очертана от всеки интерфейс, като имплементира няколко интерфейса. С помощта на тази функционалност разработчиците могат да използват повторно кода и да увеличат адаптивността на своите идеи.

списък възел в java

Ето примери за код за всеки тип интерфейс в Java заедно със съответния изход:

Маркерни интерфейси

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

Изход:

 true 

Функционални интерфейси

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

Изход:

 false true 

Интерфейси на единичен абстрактен метод (SAM):

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

Изход:

изберете като
 Performing action 

Нормални интерфейси

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

Изход:

xml коментар
 Hello, World! 

Множество интерфейси за наследяване:

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

Изход:

 Method 1 Method 2 

Тези примери демонстрират използването и поведението на различни типове интерфейси в Java. Можете да стартирате всеки кодов фрагмент поотделно, за да наблюдавате съответния изход.

В заключение, Java интерфейсите предлагат мощен метод за определяне на договори и постигане на модулност на кода. Интерфейсите са от съществено значение за разработката на Java, независимо дали са маркерни интерфейси, които указват специфични черти, функционални интерфейси, които позволяват функционално програмиране, обикновени интерфейси, които дефинират договори, или множество интерфейси за наследяване, които комбинират няколко договора. Java разработчиците са по-добре подготвени да създават ясен, разширим код, когато са наясно с различните типове интерфейси и техните функции.