Расширяемость

В оркестр класса Music можно добавить новые типы, не изменяя метод tune (). Для этого метод должен оперировать интерфейсом базового класса- т.е.использовать только методы базового класса..

class Percussion extends Instrument {

void play (Note n) {System.out.println (“Percussion.play ()” + n); }

String what() {return “Percussion”;}

void adjust() {

print (“Adjusting Percussion”);}

}

class Stringed extends Instrument {

void play (Note n) {…}

}

class Brass extends Wind {

void play (Note n) {…}

}

class WoodWind extends Wind {

void play (Note n) {…}

}

____________________________________________________

public class Music 3 {

public static void tune(Instrument i) {

i.play(Note. MIDDLE_C);

}

public 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......

Можем добавить новые методы и классы, не изменяя tune(). Метод изолирован от изменений в коде.

Полиморфизм позволяет отделить изменяемую часть от неизменяемой.


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



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