logo

Интерфејс у ​​Јави

  1. Интерфејс
  2. Пример интерфејса
  3. Вишеструко наслеђивање по интерфејсу
  4. Зашто је вишеструко наслеђивање подржано у интерфејсу док није подржано у случају класе.
  5. Маркер Интерфаце
  6. Угнежђени интерфејс

Ан интерфејс у ​​Јави је нацрт класе. Има статичке константе и апстрактне методе.

Интерфејс у ​​Јави је механизам за постизање одвајање . У Јава интерфејсу могу постојати само апстрактне методе, а не тело методе. Користи се за постизање апстракције и вишеструкости наслеђе у Јави .

Другим речима, можете рећи да интерфејси могу имати апстрактне методе и променљиве. Не може имати тело методе.

Јава интерфејс такође представља однос ИС-А .

Не може се инстанцирати баш као апстрактна класа.

Од Јава 8 можемо имати подразумеване и статичке методе у интерфејсу.

јава стринг замена

Од Јаве 9 можемо имати приватне методе у интерфејсу.

Зашто користити Јава интерфејс?

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

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

Како декларисати интерфејс?

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

Синтакса:

 interface { // declare constant fields // declare methods that abstract // by default. } 

Побољшање интерфејса Јава 8

Од Јава 8 , интерфејс може да има подразумеване и статичке методе о чему ће бити речи касније.

Интерно додавање од стране компајлера

Јава компајлер додаје јавне и апстрактне кључне речи пре методе интерфејса. Штавише, додаје јавне, статичке и коначне кључне речи пре чланова података.

Другим речима, поља интерфејса су подразумевано јавна, статична и коначна, а методе су јавне и апстрактне.

интерфејс у ​​јава

Однос између класа и интерфејса

Као што је приказано на доњој слици, класа проширује другу класу, интерфејс проширује други интерфејс, али а класа имплементира интерфејс .

матх.пов јава
Однос између класе и интерфејса

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

У овом примеру, интерфејс за штампање има само један метод, а његова имплементација је обезбеђена у класи А6.

 interface printable{ void print(); } class A6 implements printable{ public void print(){System.out.println('Hello');} public static void main(String args[]){ A6 obj = new A6(); obj.print(); } } 
Тестирајте одмах

Излаз:

 Hello 

Пример Јава интерфејса: Дравабле

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

Датотека: ТестИнтерфаце1.јава

 //Interface declaration: by first user interface Drawable{ void draw(); } //Implementation: by second user class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class Circle implements Drawable{ public void draw(){System.out.println('drawing circle');} } //Using interface: by third user class TestInterface1{ public static void main(String args[]){ Drawable d=new Circle();//In real scenario, object is provided by method e.g. getDrawable() d.draw(); }} 
Тестирајте одмах

Излаз:

питхон ос листдир
 drawing circle 

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

Хајде да видимо још један пример јава интерфејса који обезбеђује имплементацију интерфејса Банке.

Датотека: ТестИнтерфаце2.јава

 interface Bank{ float rateOfInterest(); } class SBI implements Bank{ public float rateOfInterest(){return 9.15f;} } class PNB implements Bank{ public float rateOfInterest(){return 9.7f;} } class TestInterface2{ public static void main(String[] args){ Bank b=new SBI(); System.out.println('ROI: '+b.rateOfInterest()); }} 
Тестирајте одмах

Излаз:

 ROI: 9.15 

Вишеструко наслеђивање у Јави по интерфејсу

Ако класа имплементира више интерфејса, или интерфејс проширује више интерфејса, то је познато као вишеструко наслеђивање.

вишеструко наслеђивање у Јави
 interface Printable{ void print(); } interface Showable{ void show(); } class A7 implements Printable,Showable{ public void print(){System.out.println('Hello');} public void show(){System.out.println('Welcome');} public static void main(String args[]){ A7 obj = new A7(); obj.print(); obj.show(); } } 
Тестирајте одмах
 Output:Hello Welcome 

П) Вишеструко наслеђивање није подржано кроз класу у Јави, али је могуће преко интерфејса, зашто?

Као што смо објаснили у поглављу о наслеђивању, вишеструко наслеђивање није подржано у случају класа због нејасноће. Међутим, подржан је у случају интерфејса јер нема двосмислености. То је зато што његову имплементацију обезбеђује класа имплементације. На пример:

 interface Printable{ void print(); } interface Showable{ void print(); } class TestInterface3 implements Printable, Showable{ public void print(){System.out.println('Hello');} public static void main(String args[]){ TestInterface3 obj = new TestInterface3(); obj.print(); } } 
Тестирајте одмах

Излаз:

функције Ардуина
 Hello 

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


Наслеђивање интерфејса

Класа имплементира интерфејс, али један интерфејс проширује други интерфејс.

 interface Printable{ void print(); } interface Showable extends Printable{ void show(); } class TestInterface4 implements Showable{ public void print(){System.out.println('Hello');} public void show(){System.out.println('Welcome');} public static void main(String args[]){ TestInterface4 obj = new TestInterface4(); obj.print(); obj.show(); } } 
Тестирајте одмах

Излаз:

 Hello Welcome 

Јава 8 подразумевани метод у интерфејсу

Од Јаве 8, можемо имати тело метода у интерфејсу. Али морамо да га поставимо као подразумевани метод. Хајде да видимо пример:

Датотека: ТестИнтерфацеДефаулт.јава

јава таил
 interface Drawable{ void draw(); default void msg(){System.out.println('default method');} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceDefault{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); d.msg(); }} 
Тестирајте одмах

Излаз:

 drawing rectangle default method 

Јава 8 статички метод у интерфејсу

Од Јаве 8, можемо имати статички метод у интерфејсу. Хајде да видимо пример:

Датотека: ТестИнтерфацеСтатиц.јава

 interface Drawable{ void draw(); static int cube(int x){return x*x*x;} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceStatic{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); System.out.println(Drawable.cube(3)); }} 
Тестирајте одмах

Излаз:

 drawing rectangle 27 

П) Шта је маркер или означени интерфејс?

Интерфејс који нема члана је познат као маркер или означен интерфејс, на пример, Сериализабле , Цлонеабле, Ремоте, итд. Користе се да обезбеде неке битне информације ЈВМ-у тако да ЈВМ може да изврши неку корисну операцију.

 //How Serializable interface is written? public interface Serializable{ } 

Угнежђени интерфејс у ​​Јави

Напомена: Интерфејс може имати други интерфејс који је познат као угнежђени интерфејс. То ћемо детаљно научити у угнежђене класе поглавље. На пример:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
Више о угнеженом интерфејсу