Интерфейс - это своего рода набор правил, описывающие совокупность возможностей, предоставляемых классом.
В интерфейсе задается набор методов, которые должен реализовывать класс, содержащий интерфейс. Один интерфейс могут использовать сразу несколько классов, так же как и один класс может быть расширен несколькими интерфейсами (в этом случае класс должен содержать все методы всех интерфейсов). В этом случае интерфейсы указываются через запятую в объявлении класса.
Так как класс может наследовать несколько интерфейсов, то их использование дает возможность расширить возможности создаваемого класса. В отличие от интерфейса, простое наследование ограничивает создаваемый класс рамками только родительского класса.
Для указания того, что класс наследует интерфейс надо указать слово implements.
Например:
// интерфейс
interface Fruit {
void setName(String s);
}
//класс
class Apple implements Fruit {
String name;
public String getName() { // добавляем свой метод
return name;
}
public void setName(String s) { // описываем метод интерфейса
this.name = s;
}
public static void main(String[] args) {
Applemy1 = new Apple();
my1.setName("Apple");
System.out.println(my1.getName());
}
}
Можно объявить переменную с типом данных, являющимся наименованием интерфейса, например для примера ниже строку Apple my1 = new Apple(); заменим на Fruit my1 = new Apple();
В этом случае при вызове метода my1.getName() будет выведена ошибка, так как в интерфейсе Fruit нет такого метода.
Можно посмотреть мутный пример с использованием нескольких наследуемых интерфейсов здесь: http://www.fandroid.info/interfejsy/
Интерфейс может быть частью класса. При создании нового класса, если необходимо использовать такой интерфейс, то указывается имя класса и через точку имя интерфейса, например:
public class SomeClass {
interface Callback{
void callingBack();
}
Callback callback;
public void registerCallBack(Callback callback){
this.callback = callback;
}
void doSomething(){
JOptionPane.showMessageDialog(null, "Выполняется работа");
// вызываем метод обратного вызова
callback.callingBack();
}
}
// новый класс, который наследует интерфейс класса SomeClass
public class MyClass implements SomeClass.Callback {
@Override
public void callingBack() {
System.out.println("Вызов метода обратного вызова");
}
}
|