Интерфейс (interface)-указывает, что класс должен делать, но реализует действия, то как он это делает.
Синтаксис
Интерфейс объявляется так же, как и класс. Пример общего вида интерфейса:
1 2 3 4 5 6 7 8 9 10 11 |
//nookery.ru public interface Const { public int COORDINATE_X=0; public int COORDINATE_Y=0; int INKRIMENT=1; int BALL_X=0; int BALL_Y=0; void speed(int arg); } |
Переменные могут быть объявлены внутри деклараций интерфейса. Они являются окончательными и неявно статическими их еще называют константами. Также переменные должны быть инициализированы с постоянным значением. Все методы и переменные являются неявно открытыми, интерфейс сам по себе является публичным, открытым классом.
Ниже приведен пример определения интерфейса.
1 2 3 |
interface Test{ void speed(int arg); } |
Реализация интерфейсов
Для того, чтобы реализовать интерфейс, включают в себя ключевое слово implements в определении класса, а затем создают методы, определенные в интерфейсе.
Общий вид класса, который включает в себя implements выглядит следующим образом:
1 2 3 |
class Имя_Класса [extends superclass] [implements interface [Имя_Интерфейса]] { //Тело класса } |
speed() объявляется с помощью (public) публичного модификатора доступа. При реализации метода интерфейса, он должен быть объявлен как public.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//nookery.ru public interface Const { public int COORDINATE_X=0; public int COORDINATE_Y=0; int INKRIMENT=1; int BALL_X=0; int BALL_Y=0; void speed(int param); } class Test implements Const{ // Implement Callback's interface public void speed(int p) { System.out.println("Скорость мяча равна=" + p); } } |
Java Интерфейс как тип данных
После того, как мы определяем интерфейс, мы можем использовать его в качестве типа для экземпляра объекта , все это мы создаем через класс реализации.
В следующем примере вызывается метод обратного вызова () через ссылку на интерфейс переменной:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//nookery.ru public interface Const { public int COORDINATE_X=0; public int COORDINATE_Y=0; int INKRIMENT=1; int BALL_X=0; int BALL_Y=0; void speed(int param); } class Test implements Const{ // Implement Callback's interface public void speed(int p) { System.out.println("Скорость мяча равна=" + p); } } public class Realised { public static void main(String args[]) { Const c = new Const() { @Override public void speed(int param) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } }; c.speed(70); } } |
Результатом работы программы будет: 70
Java Полиморфизм и интерфейс.
Интерфейс предназначен для полиморфизма. Интерфейс определяет список методов , действующих в качестве контракта между интерфейсом и его реализации. Один интерфейс может быть реализован более чем один раз и в каждой отдельной реализации одного и того же интерфейса будет выполнятся тот же список методов. Поэтому если мы знаем, что некоторые классы реализуют один и тот же интерфейс мы можем использовать этот интерфейс для создания ссылки на все его реализатор классов. Компилятор будет динамически определять, какую реализацию использовать.
Пример интерфейса interface.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
//nookery.ru public interface Const { public int COORDINATE_X=0; public int COORDINATE_Y=0; int INKRIMENT=1; int BALL_X=0; int BALL_Y=0; void speed(int param); } class Test implements Const{ public void speed(int p) { System.out.println("Скорость мяча равна=" + p); } } class Test2 implements Const{ // Implement Callback's interface public void speed(int param) { System.out.println("Другой класс"); System.out.println("Скорость=" + (param)); } } class GL { public static void main(String args[]) { Const c = new Test(); Test2 t = new Test2(); c.speed(34); c = t; c.speed(34); } } |
Результатом работы программы будет:
Скорость мяча равна=34
Другой класс
Скорость=34
Java интерфейс, сборка блока.
В классе можно реализовать интерфейс но не в полном объеме, то есть реализовать те методы которые вам нужны, для этого вам достаточно объявить класс как абстрактный. Ниже я привел пример такой реализации интерфейса.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//nookery.ru public interface Const { public int COORDINATE_X=0; public int COORDINATE_Y=0; int INKRIMENT=1; int BALL_X=0; int BALL_Y=0; void speed(int param); void show(); } abstract class Test implements Const{ public void speed(int p) { System.out.println("Скорость мяча равна=" + p); } } |
Расширение интерфейса Extend Interface
Один интерфейс может наследовать другой интерфейс с ключевым словом extends.
Скорость мяча равна=34
Другой класс
Скорость=34