Что такое интерфейс в Java и как его реализовать?



Эта статья поможет вам со всесторонним подходом к интерфейсу Java и различными типами примеров, связанных с его функциональностью.

' Интерфейс представляет собой продвинутый уровень достижения абстракции в языке программирования Java. Интерфейс Java помогает в снижение сложности в коде и упрощает читаемость . В этой статье я объясню вам интерфейс Java с помощью следующего документа.

Что такое интерфейс Java?

Компьютерный интерфейс называется границей, разделяющей две или более системы. Он обменивается данными между компонентами системы, которые могут передавать сигналы, команды или протоколы.





java-interface

Java Abstraction обеспечивает функциональность конкретного метода, скрывая логику реализации, написанную внутри метода. Точно так же интерфейс Java также является абстрактным классом, который включает объявление метода, но не его определение. Класс орудия Интерфейс для наследования абстрактных методов. Наряду с абстрактными методами интерфейс может также включать константы, статические методы, вложенные интерфейсы и методы по умолчанию.



Сходства между классом и интерфейсом.

Интерфейс полностью похож на обычный класс в Java. Интерфейс включает абстрактные методы, и эти методы предназначены для реализации. Этот процесс просто равен наследованию, что нормально, когда дело касается классов. Мы обсудим больше сходства.

  • Как и класс, интерфейс может содержать любое количество методов.
  • Подобно классам, интерфейс также написан с .Ява файл расширения.
  • Удивительно, но байт-код интерфейса появился в .класс файл.
  • Интерфейс показан в виде пакета, а соответствующий байт-код находится в каталоге, который совпадает с именем пакета.

Зачем нам нужен интерфейс?

Java не поддерживает Множественное наследование, из-за чего он не позволит классам расширять более одного класса в экземпляре. Дочерние классы не мог наследовать свойства несколько родительских классов в единственном случае, так как это приводит к Алмазная проблема. Чтобы решить эту проблему, Интерфейс вводится. Давайте разберемся с этой проблемой на примере.



Допустим, у нас есть два самолета, один может нести только пассажиры, только другой должность. Теперь нам нужно наследовать свойства грузового и пассажирского самолетов. Java не поддерживает это решение, поскольку оно попадает в двусмысленность между двумя самолетами.

Но если вы можете сделать это возможным, заставив Java почувствовать, что она наследует один уровень и реализация методы присутствуют в другой плоскости. Это похоже на коммерческий самолет, который принимает как пассажиров, так и грузовой багаж. Интерфейс похож на создание большей плоскости, которая может выполнять обе задачи, не мешая друг другу компонентов, вместо этого просто заимствуя методы из Класс интерфейса.

факториал с использованием рекурсии в c

// Код класса A

пакет с несколькими классами A {void msg () {System.out.println ('Hello')}}

// Код класса B

пакет нескольких классов B {void msg () {System.out.println ('Welcome')}}

Код класса C

package multiple class C extends A, B {// Это не будет принято Java, это вызовет ошибку, и код не будет выполнен. public static void main (String args []) {C obj = new C () obj.msg ()}}

Вывод:

Ошибка. Этот конкретный подход вызывает исключение. Java не поддерживает множественное наследование. Эта ошибка известна как Алмазная проблема 

Давайте попробуем решение, используя интерфейс, Дочерние классы может получить доступ к методам из Несколько родителей классы в единственном экземпляре.

// Код интерфейса

пакет решение для открытого интерфейса MIS {public void Hello () public void Welcome ()}

// Код класса

пакет MIS публичный класс classA реализует решение {public void Hello () {java.lang.System.out.println ('Hello world')} public void Welcome () {java.lang.System.out.println ('Добро пожаловать в Edureka ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

Вывод:

Привет мир
Добро пожаловать в Эдурека

Объявление интерфейса Java: синтаксис

interface interface_name {// объявление постоянных полей // объявление методов () // методы по умолчанию}

Давайте рассмотрим пример интерфейса Java

Пример интерфейса Java

Давайте создадим простой калькулятор на основе интерфейса Java.

// Код интерфейса

пакет basicoperations общедоступный интерфейс математики {public void add () public void sub () public void mul () public void div ()}

// Код класса

package basicoperations import java.util.Scanner public class student1 реализует математику {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Введите любые два целых значения для выполнения сложения') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Сумма' + a + 'и' + b + 'равна' + s)} @Override public void sub () {Scanner kb = new Scanner (System.in) System.out.println ('Введите два любых целых числа для выполнения вычитания') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('Разница между' + a + 'и' + b + 'равна' + s)} @Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter умножение любых двух целочисленных значений ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Продукт '+ a +' и '+ b +' равен '+ s)} @Override public void div () {Scanner kb = new Scanner (System.in) System.out.println ('Введите любое деление двух целых чисел') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('Соотношение' + a + 'и' + b + 'равно' + s)} public static void main (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Вывод:

Продвигаясь дальше, мы научимся встраивать интерфейс Java.

Вложение интерфейса Java

Вложение интерфейса это процесс объявления интерфейса внутри другого Существующий интерфейс или объявление интерфейса внутри Класс. Вложенный интерфейс также известен как Внутренний интерфейс.

Вложенный интерфейс недоступен прямо . Следовательно, вложение реализовано для разрешения пространств имен путем их группировки с соответствующими Интерфейсы и Классы. По этой процедуремы можем назвать Вложенный интерфейс сквозь Внешний класс или Внешний интерфейс имя, за которым следует точка (.) , и Имя интерфейса.

Давайте попробуем несколько примеров на основе Вложение интерфейсов. Сначала попробуем вложить Интерфейс Java внутри другого Интерфейс Java как показано ниже:

// Код интерфейса

общедоступный интерфейс пакета Nest OuterInterface {void display () interface InnerInterface {void InnerMethod ()}}

// Код класса

package Nest class NestedInterfaceDemo реализует OuterInterface.InnerInterface {public void InnerMethod () {int n = 10, t1 = 0, t2 = 1 System.out.print ('First' + n + 'terms:') for (int i = 1 i & lt = n ++ i) {System.out.print (t1 + '+') int sum = t1 + t2 t1 = t2 t2 = sum} System.out.println ('nПечать из метода вложенного внутреннего интерфейса ...! n ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Вывод:

Первые 10 терминов: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Печать с помощью метода Nested InnerInterface ...!

А теперь давайте попробуем вложить Интерфейс Java внутри Класс Java.

// Код интерфейса

общедоступный класс пакета Nest2 EdurekaClass {interface EdurekaInterface {void NestedMethod ()}}

// Код класса

пакет Nest2 class NestedInterfaceDemo2 реализует EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () byte [] result = new byte [strAsByteByteArray.ItArray] (i .length i ++) result [i] = strAsByteArray [strAsByteArray.length-i-1] System.out.println (new String (result))} public static void main (String args []) {EdurekaClass.EdurekaInterface obj = new NestedInterfaceDemo2 () obj.NestedMethod ()}}

Вывод:

акеруде

Хотя интерфейс выглядит почти как класс, между ними есть некоторые различия. Давайте обсудим их различия.

Разница между Java-классом и Java-интерфейсом

ИНТЕРФЕЙС КЛАСС
Поддерживает множественное наследование Не поддерживает множественное наследование
Не имеет участников данных Включает элементы данных
Не имеет конструкторов Включает конструкторы
Включает неполных участников (подписанный член) Включает как полные (аннотации), так и неполные члены
Не имеет модификаторов доступа Включает модификаторы доступа
Интерфейс не имеет статических членов Класс имеет все члены как статические

Преимущества и недостатки интерфейса Java

Преимущества:

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

Недостатки:

  • Использование интерфейса Java снижает скорость исполнения приложения.
  • Интерфейсы Java в приложении либо используются многократно, либо практически не используются.

Ключевые моменты интерфейса Java

  • Ни один из методов, объявленных в интерфейсе, не имеет тела, обеспечивающего полную абстракцию.
  • Невозможно создать объект интерфейса. Следовательно, создание интерфейса невозможно.
  • Класс может реализовать интерфейс, используя ключевое слово реализации. Давайте посмотрим на это на примере.

// Код интерфейса

общедоступный интерфейс пакета extInterface extInterface {public void method1 () public void method2 ()}

// Код класса

пакет extInterface import java.util.Scanner класс Edureka реализует extInterface {public void method1 () {System.out.println ('реализация метода1') Scanner scanner = new Scanner (System.in) System.out.println ('Введите номер чтобы найти квадратный корень в Java: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf (' Квадратный корень из числа:% f:% f% n ', квадрат, squareRoot)} public void method2 () {System.out.println ('реализация метода2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

Вывод:

реализация метода 1 Введите число, чтобы найти квадратный корень в Java: 16 Квадратный корень из числа: 16,0: 4,0
  • Класс может реализовывать множественные наследования в одном экземпляре. Давайте разберемся в этом с помощью следующего кода.

// Код интерфейса 1

пакет ExtendInt общедоступный интерфейс Interface1 {public void armstrong ()}

// Код интерфейса 2

package ExtendInt public interface Interface2 {public void prime ()} // Код класса package ExtendInt открытый класс Edureka2 реализует Interface1, Interface2 {public void armstrong () {int c = 0, a, temp int n = 153 // input temp = n while (n & gt0) {a = n% 10 n = n / 10 c = c + (a * a * a)} if (temp == c) System.out.println ('число Армстронга') else System.out.println ('Не число Армстронга') System.out.println ('Расширение до интерфейса 1')} public void prime () {int i, m = 0, flag = 0 int n = 3 // ввод m = n / 2, если (n == 0 || n == 1) {System.out.println (n + 'не является простым числом')} else {for (i = 2i & lt = mi ++) {if (n% i == 0) {System .out.println (n + 'не простое число') flag = 1 break}} if (flag == 0) {System.out.println (n + 'является простым числом')}} System.out.println ('Расширение к интерфейсу 2 ')} public static void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

Вывод:

3 - простое число, расширяющееся до интерфейса 2 Число armstrong, расширяющееся до интерфейса 1
  • Интерфейс Java требует, чтобы объявленные переменные были инициализированы во время объявления.
  • Модификаторы доступа для интерфейса по умолчанию установлены на public static и final. Давайте разберемся в этом на примере

// Код интерфейса

общедоступный интерфейс теста пакета Try {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • Все приведенные выше объявления верны и действительны внутри интерфейса.
  • Интерфейс Java может расширять любое количество интерфейсов, но никогда не может его реализовать.
  • Класс Java может реализовывать любое количество интерфейсов.
  • Класс Java не может реализовать интерфейсы с тем же именем метода и другим типом возвращаемого значения.
  • Если существует два или более метода с одним и тем же именем, которые существуют в нескольких интерфейсах, тогда достаточно реализовать метод один раз. Давайте разберемся в этом на практическом примере.

// Код интерфейса

пакет тот же публичный интерфейс A {public void display ()} // код интерфейса пакет тот же публичный интерфейс B {public void display ()} // код класса пакет тот же класс тот же реализует A, B {public void display () {System.out .println ('отображение данных')} public static void main (String [] args) {same print = new same () print.display ()}}

Вывод:

Добро пожаловать в Edureka E-Learning

На этом мы подошли к концу данной статьи. Надеюсь, вы поняли важность интерфейса, синтаксиса, функциональности, вложенности интерфейса, ключевых моментов интерфейса Java и операций, выполняемых с их помощью.

Теперь, когда вы разобрались с основами Java, ознакомьтесь с от Edureka, надежной компании по онлайн-обучению с сетью из более чем 250 000 довольных учащихся по всему миру. Курс обучения и сертификации по Java J2EE и SOA от Edureka предназначен для студентов и профессионалов, которые хотят стать Java-разработчиками. Курс разработан, чтобы дать вам хорошее начало в программировании на Java и обучить вас как основным, так и продвинутым концепциям Java, а также различным фреймворкам Java, таким как Hibernate и весна .

Есть вопрос к нам? Упомяните об этом в разделе комментариев этого блога «Интерфейс Java», и мы свяжемся с вами как можно скорее.