Интерфейс (interface)-указывает, что класс должен делать, но реализует действия, то как он это делает.
Синтаксис
Интерфейс объявляется так же, как и класс. Пример общего вида интерфейса:
//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);
}
Переменные могут быть объявлены внутри деклараций интерфейса. Они являются окончательными и неявно статическими их еще называют константами. Также переменные должны быть инициализированы с постоянным значением. Все методы и переменные являются неявно открытыми, интерфейс сам по себе является публичным, открытым классом.
Ниже приведен пример определения интерфейса.
interface Test{
void speed(int arg);
}
Реализация интерфейсов
Для того, чтобы реализовать интерфейс, включают в себя ключевое слово implements в определении класса, а затем создают методы, определенные в интерфейсе.
Общий вид класса, который включает в себя implements выглядит следующим образом:
class Имя_Класса [extends superclass] [implements interface [Имя_Интерфейса]] {
//Тело класса
}
speed() объявляется с помощью (public) публичного модификатора доступа. При реализации метода интерфейса, он должен быть объявлен как public.
//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 Интерфейс как тип данных
После того, как мы определяем интерфейс, мы можем использовать его в качестве типа для экземпляра объекта , все это мы создаем через класс реализации.
В следующем примере вызывается метод обратного вызова () через ссылку на интерфейс переменной:
//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.
//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 интерфейс, сборка блока.
В классе можно реализовать интерфейс но не в полном объеме, то есть реализовать те методы которые вам нужны, для этого вам достаточно объявить класс как абстрактный. Ниже я привел пример такой реализации интерфейса.
//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
