Интерфейсы

Интерфейс – вид класса (абстрактного), где все методы абстрактны (полностью абстрактные классы). Интерфейс может содержать константы (поля 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 ();//полиморфизм

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: