Абстрактные классы и методы

Класс Instrument создавался для определения общего интерфейса всех производных классов. Этот интерфейс и определяет общность всех производных классов.

Абстрактный метод - метод который не имеет тела, есть только объявление.

abstract void f();

Класс с абстрактными методами – абстрактный класс.

abstract Instrument {…}

Класс, где есть хотя бы один абстрактный метод называется абстрактным.

В производном классе нужно переопределить все абстрактные методы, или он останется абстрактным. Создание экземпляров абстрактного класса запрещено, но можно делать upcasting к типу абстрактного класса. То есть можно описывать переменные абстрактного класса и присваивать им ссылки на неабстрактных потомков. При этом всегда применяется upcasting.

Например

Shape s = new Circle ();

Абстрактный класс –заготовка, часть методов реализовано, часть-нет.

abstract class Instrument {

private int i;

public abstract void play (Note n);

public String what () {

return “Instrument”;

}

public abstract void adjust();

}

class Wind extends Instrument {

public void play (Note n) {

System.out.println (“Wind.play () ” +n);

}

public String what () {return “Wind”;}

public void adjust () {}

}

class Percussion extends Instrument {

public void play (Note n) {

System.out.println (“Percussion.play () ” +n);

}

public String what (){return “Percussion”; }

public void adjust (){}

}

class Stringed extends Instrument {

public void play (Note n) {

System.out.println (“Stringed.play () ” +n);

}

public String what (){return “Stringed”; }

public void adjust (){}

}

class Brass extends Wind {

public void play (Note n) {

System.out.println (“Brass.play () ” +n);

}

public void adjust (){

System.out.println (“Brass.adjust()”);

}

}

class Woodwind extends Wind {

public void play (Note n){

System.out.println (“Woodwind.play() ” +n);

}

public String what () { return (“Woodwind”; }

}

public class Music4

static void tune (Instrument i) {

i.play (Note.MIDDLE_C);

}

static void tuneAll (Instrument[] e){

for (int i=0; i<e.length; i++)

tune (e[i]);

}

public static void main (String [] args){

Instrument [] orchestra = {

new Wind (),

new Percussion (),

new Stringed (),

new Brass (),

new Woodwind (),

};

tuneAll (orchestra);

}

}

Wind.play () Middle C

Percussion.play () Middle C

Stringed.play () Middle C

Brass.play () Middle C

Woodwind.play Middle C


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



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