# Интерфейс

Интерфейсът изглежда като клас, но не е клас. Интерфейсът може да има методи и променливи точно като класа, но методите, декларирани в интерфейса, са по подразбиране абстрактни. Също така, променливите, декларирани в интерфейса, са public static final по подразбиране.

Тъй като методите в интерфейсите нямат тяло, те трябва да бъдат имплементирани от клас, преди да се достъпват. Класът, който реализира интерфейса, трябва да имплементира всички методи на този интерфейс. В Java не е позволено наследяване на повече от един клас, но можете да се имплементират повече от един интерфейс от един клас.

```
interface ExampleInterface {
   /* Всички методи са публични и абстрактни по добразбиране
    * те нямат тяло
    */
   public void method1();
   public void method2();
}
class Demo implements ExampleInterface {
   /* Класовете, който имплементират интерфейса 
    * трябва да реализират методите на интерфейса
    */
   public void method1()
   {
	System.out.println("implementation of method1");
   }
   public void method2()
   {
	System.out.println("implementation of method2");
   }
   public static void main(String arg[])
   {
	MyInterface obj = new Demo();
	obj.method1();
   }
}
class Main {
   public static void main(String arg[])
   {
	MyInterface obj = new Demo();
	obj.method1();
   }
}
```

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

```
interface Inf1 {
   public void method1();
}
interface Inf2 extends Inf1 {
   public void method2();
}
public class Demo implements Inf2 {
   /* Класа имплементиращ интерфейс
    * трябва да имплементира всички методи от интерфейса и
    * неговите родителдски интерфейси
    */
    public void method1(){
	System.out.println("method1");
    }
    public void method2(){
	System.out.println("method2");
    }
    public static void main(String args[]){
	Inf2 obj = new Demo();
	obj.method2();
    }
}
```

### Маркиращи интерфейси

Празният интерфейс е известен като интерфейс за етикет или маркер. Например Serializable, EventListener, Remote(java.rmi.Remote) са интерфейси на маркери. Тези интерфейси нямат поле и методи в себе си. Прочетете повече за това тук.

### Важно

1. Не можем да инстанцираме интерфейс в java. Това означава, че не можем да създадем обект на интерфейс
2. Интерфейсът осигурява пълна абстракция, тъй като никой от неговите методи няма тяло.
3. **implements** ключовата дума се използва от класовете за имплементиране на интерфейс.
4. За да се осигурява реализация в клас на всеки метод от интерфейс то метода трябва да бъде публичен.
5. Класът, който имплементира интерфейс, трябва да имплементира всички методи на този интерфейс, в противен случай класът трябва да бъде абстрактен.
6. Интерфейсът не може да бъде деклариран като private, protected.
7. Всички методи на интерфейса по подразбиране са абстрактни и публични.
8. Променливите, декларирани в интерфейса, са public, static and final по подразбиране.

###
