logo

Интерфейс в Java

  1. Интерфейс
  2. Пример за интерфейс
  3. Множествено наследяване по интерфейс
  4. Защо множественото наследяване се поддържа в интерфейса, докато не се поддържа в случай на клас.
  5. Маркерен интерфейс
  6. Вложен интерфейс

Ан интерфейс в Java е план на клас. Има статични константи и абстрактни методи.

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

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

Java интерфейс също представлява връзката IS-A .

Не може да бъде инстанциран точно като абстрактния клас.

От Java 8 можем да имаме методи по подразбиране и статични в интерфейс.

От Java 9 можем да имаме частни методи в интерфейс.

управление на съхранена програма

Защо да използвате Java интерфейс?

Има основно три причини да използвате интерфейс. Те са дадени по-долу.

  • Използва се за постигане на абстракция.
  • Чрез интерфейс можем да поддържаме функционалността на множественото наследяване.
  • Може да се използва за постигане на хлабаво свързване.
Защо да използвате Java интерфейс

Как да декларирам интерфейс?

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

Синтаксис:

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

Подобрение на интерфейса на Java 8

От Java 8 , интерфейсът може да има методи по подразбиране и статични, което се обсъжда по-късно.

Вътрешно добавяне от компилатора

Компилаторът на Java добавя публични и абстрактни ключови думи преди интерфейсния метод. Освен това той добавя публични, статични и крайни ключови думи преди членовете на данните.

С други думи, полетата на интерфейса са публични, статични и окончателни по подразбиране, а методите са публични и абстрактни.

интерфейс в java

Връзката между класове и интерфейси

Както е показано на фигурата по-долу, един клас разширява друг клас, един интерфейс разширява друг интерфейс, но a клас имплементира интерфейс .

Връзката между клас и интерфейс

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

В този пример интерфейсът Printable има само един метод и неговата реализация е предоставена в клас A6.

 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 

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

В този пример интерфейсът Drawable има само един метод. Реализацията му се осигурява от класове Rectangle и Circle. В реален сценарий интерфейсът е дефиниран от някой друг, но неговата реализация се предоставя от различни доставчици на реализация. Освен това се използва от някой друг. Частта за внедряване е скрита от потребителя, който използва интерфейса.

Файл: TestInterface1.java

 //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 

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

Нека да видим друг пример за java интерфейс, който осигурява имплементацията на банковия интерфейс.

Файл: TestInterface2.java

 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 

Множествено наследяване в Java по интерфейс

Ако един клас имплементира множество интерфейси или един интерфейс разширява множество интерфейси, това е известно като множествено наследяване.

блокирани номера
множествено наследяване в java
 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 

В) Множественото наследяване не се поддържа чрез клас в java, но е възможно чрез интерфейс, защо?

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

 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 

Както можете да видите в горния пример, интерфейсът Printable и Showable имат едни и същи методи, но реализацията му се предоставя от клас TestTnterface1, така че няма неяснота.


Наследяване на интерфейса

Един клас имплементира интерфейс, но един интерфейс разширява друг интерфейс.

 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 

Метод по подразбиране на Java 8 в интерфейса

От Java 8 можем да имаме тяло на метода в интерфейса. Но трябва да го направим метод по подразбиране. Да видим пример:

Файл: TestInterfaceDefault.java

 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 

Статичен метод на Java 8 в интерфейса

От Java 8 можем да имаме статичен метод в интерфейса. Да видим пример:

Файл: TestInterfaceStatic.java

 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 

Q) Какво е маркерен или етикетиран интерфейс?

Интерфейс, който няма член, е известен като маркерен или етикетиран интерфейс, например, Може да се сериализира , Cloneable, Remote и т.н. Те се използват за предоставяне на съществена информация на JVM, така че JVM да може да извърши някаква полезна операция.

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

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

Забележка: Един интерфейс може да има друг интерфейс, който е известен като вложен интерфейс. Ще го научим подробно в вложени класове глава. Например:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
Повече за вложен интерфейс