Шта је интерфејс у ​​Јави и како га применити?



Овај чланак ће вам помоћи у свеобухватном приступу Јава интерфејсу и разним врстама примера повезаних са његовом функционалношћу.

' Приступ је напредни ниво постизања апстракције у програмском језику Јава. Јава интерфејс помаже у смањење сложености у коду и поједностављује читљивост . У овом чланку ћу вам објаснити Јава интерфејс кроз следећи документ.

Шта је Јава интерфејс?

Цомпутер Интерфаце је познат као граница која раздваја два или више система. Размењује податке између компонената у систему који могу сигнализирати, командовати или протоколирати.





java-interface

Јава Апстрацтион пружа функционалност одређене методе скривањем логике имплементације записане унутар методе. Слично томе, Јава интерфејс је такође апстрактна класа која укључује изјаву о методи, али не и њену дефиницију. Класа спроводи интерфејс за наслеђивање апстрактних метода. Заједно са апстрактним методама, ан приступ такође могу да укључују константе, статичке методе, угнежђени интерфејси и подразумеване методе.



Сличности између класе и интерфејса.

Интерфејс је потпуно сличан нормалној класи у Јави. Интерфејс укључује апстрактне методе и ове методе су дизајниране за примену. Овај процес је само једнак наслеђивању, што је нормално када су у питању часови. Разговараћемо више о сличностима.

  • Исто као и класа, интерфејс такође може садржавати онолико бројева метода колико је потребно.
  • Слично класама, и интерфејс се пише словом .јава датотека са наставком.
  • Изненађујуће је да се бајткод за интерфејс појавио у .класа датотека.
  • Интерфејс је приказан у облику пакета, а одговарајући бајт код налази се у директоријуму који се подудара са именом пакета.

Зашто нам треба интерфејс?

Јава не подржава Више наслеђа, због чега, Неће дозволити да се класе прошире на више класа у инстанци. Дечји часови није могао наследити својства више родитељских класа у једном случају, као што резултира Дијамантски проблем. Да бисте превазишли овај проблем, Приступ уводи се. Разумимо овај проблем на примеру.



Претпоставимо да имамо два авиона, један може да носи само путници, само онај други положај. Сад морамо наследити својства и теретног и путничког авиона. Јава не би подржала ово решење пошто заврши у двосмисленост између две равни.

Али, ако то можете учинити тако што ћете Јава осећати да наслеђује једну раван и Имплементација методе присутне у другој равни. То је попут комерцијалног авиона који прима и путнике и пртљаг. Интерфејс је попут прављења веће равни која би могла обавити оба задатка без мешања у међусобне компоненте, већ само позајмљивање метода из Интерфаце Цласс.

// клас А класе

пакет више класа А {воид мсг () {Систем.оут.принтлн ('Здраво')}}

// Ознака класе Б.

пакет више класа Б {воид мсг () {Систем.оут.принтлн ('Добродошли')}}

Ознака класе Ц.

пакет више класа Ц продужава А, Б {// Ово Јава неће прихватити, бациће грешку и код се неће извршити. јавна статичка воид главна (Стринг аргс []) {Ц обј = нев Ц () обј.мсг ()}}

Излаз:

Грешка. Овај посебан приступ доноси изузетак. Јава не подржава више наслеђа. Ова грешка је позната као Дијамантски проблем 

Покушајмо решење користећи интерфејс, Дечји часови може приступити методама из Вишеструки родитељ класе на једној инстанци.

// Интерфаце Цоде

је атом добар за питхон
пакет МИС решење за јавни интерфејс {публиц воид Здраво () публиц воид Добродошли ()}

// код класе

пакет МИС јавна класа цлассА имплементира решење {публиц воид Хелло () {јава.ланг.Систем.оут.принтлн ('Хелло ворлд')} публиц воид Добродошли () {јава.ланг.Систем.оут.принтлн ('Добродошли у Едуреку ')} публиц статиц воид маин (Стринг [] аргс) {цлассА Едурека = нев цлассА () Едурека.Хелло () Едурека.Велцоме ()}}

Излаз:

Здраво Свете
Добродошли у Едуреку

Декларација Јава интерфејса: Синтакса

интерфаце интерфаце_наме {// декларирај константна поља // деклариши методе () // задате методе}

Прођимо кроз пример Јава интерфејса

Пример Јава интерфејса

Створимо једноставан калкулатор заснован на Јава интерфејсу.

// Интерфаце Цоде

основни поступци пакета математика јавног интерфејса {публиц воид адд () публиц воид суб () публиц воид мул () публиц воид див ()}

// код класе

пакет основне операције увоз јава.утил.Сцаннер јавна класа студент1 имплементира математику {@Оверриде публиц воид адд () {Сцаннер кб = нев Сцаннер (Систем.ин) Систем.оут.принтлн ('Унесите било које две целобројне вредности за извршавање сабирања') инт а = кб.нектИнт () инт б = кб.нектИнт () инт с = а + б Систем.оут.принтлн ('Збир од' + а + 'и' + б + 'је' + с)} @ Оверриде публиц воид суб () {Скенер кб = нови Скенер (Систем.ин) Систем.оут.принтлн ('Унесите било које две целобројне вредности за извођење одузимања') инт а = кб.нектИнт () инт б = кб.нектИнт () инт с = аб Систем.оут.принтлн ('Разлика од' + а + 'и' + б + 'је' + с)} @Преузми јавни воид мул () {Сцаннер кб = нови Сцаннер (Систем.ин) Систем.оут.принтлн ('Ентер било које две целобројне вредности множења ') инт а = кб.нектИнт () инт б = кб.нектИнт () инт с = а * б Систем.оут.принтлн (' Производ '+ а +' и '+ б +' је '+ с)} @Оверриде публиц воид див () {Скенер кб = нови скенер (Систем.ин) Систем.оут.принтлн ('Унесите било које две целобројне вредности поделе') инт а = кб.нектИнт () инт б = кб.нектИнт () инт с = а / б Систем.оут.п ринтлн ('Куотиент оф' + а + 'анд' + б + 'ис' + с)} публиц статиц воид маин (Стринг [] аргс) {студент1 Едурека1 = нев студент1 () Едурека1.адд () Едурека1.суб () Едурека1. мул () Едурека1.див ()}}

Излаз:

Напредујући, научићемо да угнезди Јава интерфејс.

Гнежђење Јава интерфејса

Гнежђење интерфејса је процес декларисања Интерфејса у другом Постојећи интерфејс или декларисање интерфејса унутар Класа. Угњежђени интерфејс је познат и као Унутрашњи интерфејс.

Није могуће приступити угнежђеном интерфејсу директно . Стога се Нестинг имплементира како би се решио Простор именима групишући их сродне с њима Интерфејси и Предавања. Овим поступком,можемо назвати Угњежђени интерфејс кроз Спољна класа или Спољни интерфејс име праћено а тачка (.) , и Назив интерфејса.

Покушајмо неколико примера заснованих на Гнежђење интерфејса. Прво, покушајмо да угнезди а Јава интерфејс унутар другог Јава интерфејс како је приказано испод:

// Интерфаце Цоде

пакет Нест јавни интерфејс ОутерИнтерфаце {воид дисплаи () интерфејс ИннерИнтерфаце {воид ИннерМетход ()}}

// код класе

пакет Нест класа НестедИнтерфацеДемо имплементира ОутерИнтерфаце.ИннерИнтерфаце {публиц воид ИннерМетход () {инт н = 10, т1 = 0, т2 = 1 Систем.оут.принт ('Фирст' + н + 'термс:') фор (инт и = 1 и & лт = н ++ и) {Систем.оут.принт (т1 + '+') инт сум = т1 + т2 т1 = т2 т2 = сум} Систем.оут.принтлн ('нПринтинг фром Нестед ИннерИнтерфаце метход ...! н ')} јавна статичка воид главна (Стринг аргс []) {ОутерИнтерфаце.ИннерИнтерфаце обј = нев НестедИнтерфацеДемо () обј.ИннерМетход ()}}

Излаз:

Првих 10 термина: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Штампање из методе угнежђеног ИннерИнтерфаце ...!

Покушајмо сада да угнезди а Јава интерфејс унутар а Јава Цласс.

// Интерфаце Цоде

пакет Нест2 јавна класа ЕдурекаЦласс {интерфејс ЕдурекаИнтерфаце {воид НестедМетход ()}}

// код класе

пакет Нест2 класе НестедИнтерфацеДемо2 имплементира ЕдурекаЦласс.ЕдурекаИнтерфаце {публиц воид НестедМетход () {Стринг инпут = 'Едурека' бите [] стрАсБитеАрраи = инпут.гетБитес () бајт [] резултат = нови бајт [стрАсБитеАрраи.ленгтхАс иб лт итстр. .ленгтх и ++) ресулт [и] = стрАсБитеАрраи [стрАсБитеАрраи.ленгтх-и-1] Систем.оут.принтлн (нев Стринг (ресулт))} публиц статиц воид маин (Стринг аргс []) {ЕдурекаЦласс.ЕдурекаИнтерфаце обј = нев НестедИнтерфацеДемо2 () обј.НестедМетход ()}}

Излаз:

акерудЕ

Иако интерфејс изгледа готово слично класи, постоје неке разлике међу њима, разговарајмо о њиховим разликама.

Разлика између класе Јава и Јава интерфејса

ПРИСТУП КЛАСА
Подржава вишеструко наслеђивање Не подржава вишеструко наслеђивање
Нема чланове података Укључује чланове података
Нема конструкторе Укључује конструкторе
Укључује непотпуне чланове (члан са потписом) Укључује и комплетне (сажетак) и непотпуне чланове
Нема модификаторе приступа Укључује модификаторе приступа
Интерфејс нема статичне чланове Сви чланови имају класу Статиц

Предности и недостаци Јава интерфејса

Предности:

  • Подржава Јава Интерфаце Вишеструко наслеђивање.
  • Јава Интерфаце омогућава програмерима да сложе сложене приступе програмирању и поједноставе зависности између предмета.
  • Јава интерфејс чини чланови података и методе у пријави која ће бити лабаво повезана.

Мане:

  • Коришћење Јава интерфејса сруши брзина извршења пријаве.
  • Јава интерфејси у апликацији се или користе у више наврата или се готово уопште не користе.

Кључне тачке на Јава интерфејсу

  • Ниједна од метода декларисаних у интерфејсу нема тело које омогућава потпуну апстракцију.
  • Није могуће креирати објекат интерфејса. Стога инстанцирање интерфејса није могуће.
  • Класа може да имплементира интерфејс помоћу кључне речи имплементс. Погледајмо ово на примеру.

// Интерфаце Цоде

пакет ектИнтерфаце јавни интерфејс ектИнтерфаце {јавна воид метода1 () јавна воид метода2 ()}

// код класе

пакет ектИнтерфаце импорт јава.утил.Сцаннер класа Едурека имплементира ектИнтерфаце {публиц воид метход1 () {Систем.оут.принтлн ('имплементација метход1') Сцаннер сцаннер = нев Сцаннер (Систем.ин) Систем.оут.принтлн ('Ентер нумбер да бисте пронашли квадратни корен у Јави: ') доубле скуаре = сцаннер.нектДоубле () доубле скуареРоот = Матх.скрт (скуаре) Систем.оут.принтф (' Квадратни корен броја:% ф је:% ф% н ', квадрат, скуареРоот)} публиц воид метход2 () {Систем.оут.принтлн ('Имплементатион оф метход2')} публиц статиц воид маин (Стринг арг []) {ектИнтерфаце обј = нев Едурека () обј.метход1 ()}}

Излаз:

имплементација методе1 Унесите број да бисте пронашли квадратни корен у Јави: 16 Квадратни корен броја: 16.0 је: 4.0
  • Класа може да примени више наслеђа у једној инстанци. Разумимо то кроз следећи код.

// Интерфаце 1 Цоде

пролазећи референцом у јави
пакет ЕктендИнт јавни интерфејс Интерфаце1 {публиц воид армстронг ()}

// Интерфаце 2 Цоде

пакет ЕктендИнт јавни интерфејс Интерфаце2 {публиц воид приме ()} // Цласс Цоде пакет ЕктендИнт публиц цласс Едурека2 имплементира Интерфаце1, Интерфаце2 {публиц воид армстронг () {инт ц = 0, а, темп инт н = 153 // инпут темп = н вхиле (н & гт0) {а = н% 10 н = н / 10 ц = ц + (а * а * а)} иф (темп == ц) Систем.оут.принтлн ('армстронг број') елсе Систем.оут.принтлн ('Није армстронг број') Систем.оут.принтлн ('Проширење на интерфејс 1')} публиц воид приме () {инт и, м = 0, флаг = 0 инт н = 3 // инпут м = н / 2 иф (н == 0 || н == 1) {Систем.оут.принтлн (н + 'није прост број')} елсе {фор (и = 2и & лт = ми ++) {иф (н% и == 0) {Систем .оут.принтлн (н + 'није прост број') флаг = 1 бреак}} иф (флаг == 0) {Систем.оут.принтлн (н + 'је прост број')}} Систем.оут.принтлн ('Ектендинг то Интерфаце 2 ')} јавна статичка воид маин (Стринг аргс []) {Интерфаце2 обј = нев Едурека2 () обј.приме () Интерфаце1 обј1 = нев Едурека2 () обј1.армстронг ()}}

Излаз:

3 је прост број Проширен на Интерфаце 2 армстронг број Проширен на Интерфаце 1
  • Јава интерфејс захтева да се променљиве декларисане иницијализују у време декларације.
  • Модификатори приступа за интерфејс су подразумевано постављени на јавни статички и коначни. Да схватимо ово на примеру

// Интерфаце Цоде

тест пакета јавни интерфејс Покушајте {// јавни инт а = 10 // јавни статички завршни инт а = 10 // статички инт а = 0 // коначни инт а = 10 // инт а = 10}
  • Све горе наведене декларације су тачне и важеће у сучељу.
  • Јава интерфејс може проширити било који број интерфејса, али га никада не може применити.
  • Класа Јава може да имплементира било који број интерфејса.
  • Јава класа не може да имплементира интерфејсе са истим именом методе и различитим повратним типом.
  • Ако постоје две или више метода са истим именом методе, постоје у више интерфејса, онда је примена методе довољна једном. Разумимо то на практичном примеру.

// Интерфаце Цоде

пакет истог јавног интерфејса А {публиц воид дисплаи ()} // Интерфаце Цоде пакет истог јавног интерфејса Б {публиц воид дисплаи ()} // Цласс Цоде пакет исте класе исте имплементације А, Б {публиц воид дисплаи () {Систем.оут .принтлн ('приказивање података')} публиц статиц воид маин (Стринг [] аргс) {исти испис = нови исти () принт.дисплаи ()}}

Излаз:

Добродошли у Едурека е-учење

Овим смо дошли до краја овог чланка. Надам се да сте разумели важност интерфејса, синтаксе, функционалности, гнежђења интерфејса, кључних тачака Јава интерфејса и операција извршених помоћу њих.

Сада када сте разумели основе Јаве, погледајте Едурека, поуздана компанија за учење на мрежи са мрежом од више од 250 000 задовољних ученика раширених широм света. Едурекин курс за обуку и сертификацију Јава Ј2ЕЕ и СОА дизајниран је за студенте и професионалце који желе да буду Јава програмер. Курс је дизајниран да вам пружи почетну предност у Јава програмирању и да вас оспособи за основне и напредне Јава концепте, заједно са разним Јава оквирима попут Хибернате & Пролеће .

Имате питање за нас? Спомените то у одељку за коментаре на овом блогу „Јава Интерфаце“ и јавићемо вам се што је пре могуће.