Интерфейсы в Java
Интерфейсы Множественное наследование не допускается при помощи классов Допускается множественное наследование при помощи интерфейсов Интерфейсы допускают множественное наследование от других интерфейсов Интерфейс не может иметь объекты
Объявление интерфейсов [модификатор] interface имя{члены интерфейса} Модификаторы: public, по умолчанию Члены интерфейса: поля-константы с модификаторами public final static по умолчанию; методы с модификаторами public abstract по умолчанию. public interface Directions { int RIGHT=1; int LEFT=2; int UP=3; int DOWN=4; } public interface Moveable { void moveRight(); void moveLeft(); void moveUp(); void moveDown(); } Возможно множественное наследование интерфейсов. Для наследования используется ключевое слово extends public interface Drawable extends Colorable, Resizable {}
Реализация интерфейса public class StockApplet extends Applet implements StockWatcher {//... public void valueChanged(String tickerSymbol, double newValue) { if (tickerSymbol.equals(sunTicker)) {... } else if (tickerSymbol.equals(oracleTicker)) {... } else if (tickerSymbol.equals(ciscoTicker)) {... } } }
Пример иерархии интерфейсов автомобиль, грузовой, легковой, пикап interface Automobile {…} interface Car extends Automobile {…} class Truck implements Automobile {…} class Pickap extends Truck implements Car {…} или interface Automobile {…} interface Car extends Automobile {…} interface Truck extends Automobile {…} class Pickap implements Truck, Car {…}
Конфликт имен в интерфейсах interface A { int getValue();} interface B { double getValue();} interface A { int value=3; } interface B { double value=5.4; } class C implements A, B { public static void main(String s[]) { C c = new C(); // System.out.println(c.value); - ошибка! System.out.println(((A)c).value); System.out.println(((B)c).value); }
Реализация полиморфизма interface Voise { void voice(); } class Dog implements Voise { public void voice(){ System.out.println(gav-gav!);} } class Cat implements Voise { public void voice(){System.out.println(miaou-miaou!);} } public class Test { public static void main(String[] args) { Voise[] singer=new Voise[3]; singer[0]=new Dog(); singer[1]=new Cat(); singer[2]=new Dog(); for(int i=0; i
Определение констант class Timer implements Lights { private int delay; private static int light = RED; Timer(int sec) {delay = 1000*sec;} public int shift() { int count = (light++)%3; try { switch(count) { case RED: Thread.sleep(delay); break; case YELLOW: Thread.sleep(delay/3); break; case GREEN: Thread.sleep(delay/2); break; } }catch (Exception e) {return ERROR;} return count; } class TrafficRegulator { private static Timer t = new Timer(1); public static void main(String[] args) { for(int k=0; k
Наследование в интерфейсах public interface StockTracker extends StockWatcher { void currentValue(String tickerSymbol, double newValue); } Интерфейс компилируется в отдельный класс
Вложенные интерфейсы Использование в стороннем классе Использование во вложенных классах верхнего уровня
class Encl { A aa = new A(); interface NestedInt{ String s = "AAAAA"; void getI(); } static class Q implements NestedInt{ public void getI() { System.out.println("Static class Q Nested"+ s); } class A implements NestedInt{ public void getI() { System.out.println(class A Nested"+ s); } class My implements Encl.NestedInt { public void getI(){ System.out.println(class My "+ s); } public static void main(String [] a ) { Encl.Q m = new Encl.Q(); m.getI(); Encl e = new Encl(); e.aa.getI(); My t= new My(); t.getI(); }
// анонимный внутренний класс interface D { String readLabel(); } public class Test { int var = 86759; public D dest(final String str, final int qqq) { // без final ошибка return new D(){ public String readLabel() { return label+" " + (var+q);} // public обязательно String label = str; int q; { q = qqq; } };// обязательно ; } public static void main(String str[]) { Test ee = new Test(); D p = ee.dest("QQQ", 111); System.out.println(p.readLabel()); }
// анонимный внутренний класс interface D { void getInfo(); } public class test { public static void main(String str[]) { new D(){ void getInfo(){ System.out.println("I am anonymous!"); } }.getInfo(); }