- Интерфејс
- Пример интерфејса
- Вишеструко наслеђивање по интерфејсу
- Зашто је вишеструко наслеђивање подржано у интерфејсу док није подржано у случају класе.
- Маркер Интерфаце
- Угнежђени интерфејс
Ан интерфејс у Јави је нацрт класе. Има статичке константе и апстрактне методе.
Интерфејс у Јави је механизам за постизање одвајање . У Јава интерфејсу могу постојати само апстрактне методе, а не тело методе. Користи се за постизање апстракције и вишеструкости наслеђе у Јави .
Другим речима, можете рећи да интерфејси могу имати апстрактне методе и променљиве. Не може имати тело методе.
Јава интерфејс такође представља однос ИС-А .
Не може се инстанцирати баш као апстрактна класа.
Од Јава 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(); } }Више о угнеженом интерфејсу