- Интерфейс
- Пример за интерфейс
- Множествено наследяване по интерфейс
- Защо множественото наследяване се поддържа в интерфейса, докато не се поддържа в случай на клас.
- Маркерен интерфейс
- Вложен интерфейс
Ан интерфейс в Java е план на клас. Има статични константи и абстрактни методи.
Интерфейсът в Java е механизъм за постигане абстракция . В интерфейса на Java може да има само абстрактни методи, но не и тяло на метода. Използва се за постигане на абстракция и множество наследяване в Java .
С други думи, можете да кажете, че интерфейсите могат да имат абстрактни методи и променливи. Не може да има тяло на метод.
Java интерфейс също представлява връзката IS-A .
Не може да бъде инстанциран точно като абстрактния клас.
От Java 8 можем да имаме методи по подразбиране и статични в интерфейс.
От Java 9 можем да имаме частни методи в интерфейс.
управление на съхранена програма
Защо да използвате Java интерфейс?
Има основно три причини да използвате интерфейс. Те са дадени по-долу.
- Използва се за постигане на абстракция.
- Чрез интерфейс можем да поддържаме функционалността на множественото наследяване.
- Може да се използва за постигане на хлабаво свързване.
Как да декларирам интерфейс?
Интерфейсът се декларира с помощта на ключовата дума interface. Осигурява пълна абстракция; означава, че всички методи в интерфейса са декларирани с празно тяло и всички полета са публични, статични и окончателни по подразбиране. Клас, който имплементира интерфейс, трябва да имплементира всички методи, декларирани в интерфейса.
Синтаксис:
interface { // declare constant fields // declare methods that abstract // by default. }
Подобрение на интерфейса на Java 8
От Java 8 , интерфейсът може да има методи по подразбиране и статични, което се обсъжда по-късно.
Вътрешно добавяне от компилатора
Компилаторът на 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 по интерфейс
Ако един клас имплементира множество интерфейси или един интерфейс разширява множество интерфейси, това е известно като множествено наследяване.
блокирани номера
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(); } }Повече за вложен интерфейс