Интерфейс – вид класса (абстрактного), где все методы абстрактны (полностью абстрактные классы). Интерфейс может содержать константы (поля static final). Интерфейс не может содержать реализации, не может иметь тело.
interface Instrument {
void play (Note n); // public
void adjust (); // public
int VALUE = 5; // public static final
}
Классы реализуют (implements) интерфейс. При реализации интерфейса его методы должны быть public. Интерфейс говорит – этот класс «ведет себя как» make-a.
class Wind implements Instrument {
public void play (Note n) {
System.out.println (this + “.play ()” +n);
}
public void adjust {..println (this + “.adjust()”);}
public String to String () {return “Wind”;}
}
public class Music 5 {
static void tune (Instrument i) {
i.play (Note.MIDDLE_C);
}
static void tuneAll (Instrument [] e) {…}
public void static main (…) {
Instrument [] orchestra = {new Wind, new …};
tuneAll (orchestra);
}
}
Строится иерархия классов, которые одинаково себя ведут.
«Множественное наследование» в Java.
Один класс может реализовать много интерфейсов и к любому из них можно сделать upcasting;
interface CanFight {
void fight();
}
interface CanSwim {
void fle ();
}
class ActionCharacter {
public void fight () {}
}
class Hero extends ActionCheracter
implements CanFight, CanSwim, CanFly {
|
|
public void swim () {}
public void fly () {}
}
public class Adventure {
public static void t (CanFight x) {x.fight ();}
public static void u (CanSwin x) {x.swin ();}
public static void v (CanFly x) {x.fly ();}
public static void w (ActionCharacter x) {x.fight ();}
public static void main (String [] args) {
Hero h = new Hero ();
t(h);
u(h);
v(h);
w(h);
}
}
- интерфейсы могут наследоваться;
interface Vampire extends Monster, Lethol {…}
- интерфейс может быть построен на основе других интерфейсов.
Абстрактные классы и методы
Пример: хор животных
abstract class Pet {
abstract void voice ();
void eat () { System.out.println (“eat ()”);}
}
class Dog extends Pet{
int k=10;
void voice (){ System.out.println (“GAV!”);}
}
class Cat extends Pet {
void voice(){ System.out.println (“Miau!”);}
}
class Cow extends Pet {
void voice (){ System.out.println (“Muuu!”);}
}
public class Chorus {
public static void main (String [] args){
Pet[] singer = new Pet [3];
singer [0] = new Dog ();
singer [1] = new Cat ();
singer [2] = new Cow ();
for (int i=0; i<singer.length; i++)
singer [i].voice ();//полиморфизм
}
}