Какво е интерфейс в Java и как да го внедрим?



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

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

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

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





java-interface

Java Abstraction предоставя функционалността на определен метод, като скрива логиката за изпълнение, написана вътре в метода. По същия начин Java интерфейсът също е абстрактен клас, който включва декларацията на метода, но не и неговата дефиниция. Клас приспособления интерфейс за наследяване на абстрактните методи. Заедно с абстрактните методи, ан интерфейс може да включва и константи, статични методи, вложени интерфейси и методи по подразбиране.



Прилики между клас и интерфейс.

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

  • Същият като клас, интерфейсът може също да съдържа толкова много методи, колкото е необходимо.
  • Подобно на класовете, интерфейсът също се записва с .java файл с разширение.
  • Изненадващо, байт кодът за интерфейс ще се появи в .клас файл.
  • Интерфейсът е показан под формата на пакет и съответният им байт код е в директория, която съвпада с името на пакета.

Защо се нуждаем от интерфейс?

Java не поддържа Множество наследства, поради което няма да позволи класовете да разширяват повече от един клас в даден екземпляр. Детски класове не можа да наследи свойствата на множество родителски класове в един екземпляр, тъй като води до Диамантен проблем. За да преодолеете този проблем, Интерфейс се въвежда. Нека разберем този проблем чрез пример.



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

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

// Код от клас А

пакет няколко класа A {void msg () {System.out.println ('Здравейте')}}

// Код от клас Б

пакетирайте множество клас B {void msg () {System.out.println ('Добре дошли')}}

Код от клас С

пакет множествен клас C разширява A, B {// Това няма да бъде прието от Java, ще изведе грешка и кодът няма да бъде изпълнен. публична статична void main (String args []) {C obj = new C () obj.msg ()}}

Изход:

Грешка. Този конкретен подход създава изключение. Java не поддържа множество наследства. Тази грешка е известна като Диамантен проблем 

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

какво е контекстният филтър в таблицата

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

пакет MIS решение за публичен интерфейс {public void Здравейте () public void Добре дошли ()}

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

пакет 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 ()}}

Изход:

Здравей свят
Добре дошли в Edureka

Деклариране на Java интерфейс: Синтаксис

интерфейс име_на_интерфейс {// деклариране на константни полета // деклариране на методи () // методи по подразбиране}

Нека да разгледаме пример за Java Interface

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

Нека създадем прост калкулатор, базиран на Java интерфейс.

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

основни операции на пакета математически интерфейс {public void add () public void sub () public void mul () public void div ()}

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

пакет основни операции импортиране на java.util.Scanner публичен клас student1 реализира математика {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Въведете всякакви две целочислени стойности за извършване на добавяне') 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 ('Quotient of' + a + 'and' + b + 'is' + s)} public static void main (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Изход:

Напредвайки напред, ще се научим да влагаме Java интерфейс.

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

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

Вложенният интерфейс не може да бъде достъпен директно . Следователно, Nesting се изпълнява, за да разреши пространствата от имена, като ги групира със свързаните с тях Интерфейси и Класове. Чрез тази процедура,можем да се обадим на Вложен интерфейс през Външен клас или Външен интерфейс име, последвано от a точка (.) , и Име на интерфейса.

Нека опитаме няколко примера, базирани на Гнездене на интерфейса. Първо, нека се опитаме да вложим a Java интерфейс вътре в друга Java интерфейс както е показано по-долу:

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

пакет Nest публичен интерфейс OuterInterface {void display () интерфейс InnerInterface {void InnerMethod ()}}

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

пакет Nest клас 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 ')} публична статична void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Изход:

Първите 10 термина: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Печат от метода на вложен вътрешен интерфейс ...!

Сега, нека се опитаме да вложим a Java интерфейс вътре а Клас Java.

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

пакет Nest2 публичен клас EdurekaClass {интерфейс EdurekaInterface {void NestedMethod ()}}

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

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

Изход:

akerudE

Въпреки че интерфейсът изглежда почти подобен на клас, има някои разлики между тях, нека обсъдим техните разлики.

разлика между окончателно окончателно и финализиране

Разлика между Java Class и Java Interface

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

Предимства и недостатъци на Java интерфейса

Предимства:

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

Недостатъци:

  • Използването на Java интерфейс сваля скорост на изпълнение на приложението.
  • Java интерфейсите в приложението се използват многократно многократно или почти не се използват изобщо.

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

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

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

пакет extInterface публичен интерфейс extInterface {public void method1 () public void method2 ()}

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

пакет extInterface импортиране 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 ('изпълнение на method2')} 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

пакет ExtendInt публичен интерфейс Interface2 {public void prime ()} // Class Code пакет 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 ('armstrong number') else System.out.println ('Not armstrong number') System.out.println ('Extending to Interface 1')} public void prime () {int i, m = 0, flag = 0 int n = 3 // input m = n / 2 if (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 ')} публична статична void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

Изход:

3 е просто число, разширяващо се до интерфейс 2, армстронг число, разширяващо се до интерфейс 1
  • Java Interface изисква променливите, декларирани да бъдат инициализирани по време на декларирането.
  • Модификаторите за достъп за интерфейс са настроени на публични статични и окончателни по подразбиране. Нека разберем това с пример

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

пакет тест публичен интерфейс Опитайте {// публичен int a = 10 // публичен статичен окончателен int a = 10 // статичен int a = 0 // окончателен int a = 10 // int a = 10}
  • Всички декларации по-горе са верни и валидни в интерфейса.
  • Java интерфейсът е в състояние да разшири произволен брой интерфейси, но никога не може да внедри такъв.
  • Клас Java може да реализира произволен брой интерфейси.
  • Java Class не може да реализира интерфейси със същото име на метод и различен тип връщане.
  • Ако има два или повече метода с едно и също име на метод, съществуват в множество интерфейси, тогава прилагането на метода за веднъж е достатъчно. Нека разберем това с практически пример.

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

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

Изход:

Добре дошли в електронното обучение на Edureka

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

След като разбрахте основите на Java, разгледайте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Курсът за обучение и сертифициране на Java J2EE и SOA на Edureka е предназначен за студенти и професионалисти, които искат да бъдат Java Developer. Курсът е предназначен да ви даде начален старт в програмирането на Java и да ви обучи както за основни, така и за разширени Java концепции, заедно с различни Java рамки като Hibernate & Пролет .

Имате въпрос към нас? Споменете го в раздела за коментари в този блог „Интерфейс на Java“ и ние ще се свържем с вас възможно най-скоро.