问答题(2014年春程序员软考)

对部分乐器进行建模,其类图如图所示,包括,乐器( Instrument)、管乐器(wind)、打击乐器( Percussion)、弦乐器( Stringed)、木管乐器( Woodwind)、铜管乐器( Brass)。

下面是实现上述设计的Java代码,其中音乐类( Music)使用各类乐器( Instrument)进行演奏和调音等操作。

enum Note{/*枚举各种音调*/

MIDDLE_C, C_SHARP, B_FLAT;//其他略

}

interface Instrument{/*接口,乐器*/

__(1)__;//p1ay方法接口

void adjust();// adjust方法接口

}

class Wind __(2)__{

public void play(Note n){System. out. println("Wind. play() "+ n);}

public void adjust(){System. out. println("Wind. adjust ()");}

}

/*类 Percussion和 Stringed实现代码略*/

class Brass __(3)__{

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. printin("Woodwind. play()"+ n);}

}

public class Music{

void tune(Instrument i){i.play(Note. MIDDLE_C);}

void adjust(Instrument i){i.adjust();}

void tuneAll(__(4)__ e){

for(Instrument i : e){

adjust(i);

tune (i);

}

}

public static void main(String[] args){

Music music=__(5)__ Music();

Instrument[] orchestra =I new Wind(), new Woodwind ()};

music. tuneAll(orchestra);

}

}

Wind. adjust ()

Wind. play () MIDDLE_C

Wind. adjust()

Woodwind. play() MIDDLE_C

答案解析

(1) void play (Note n)(2) implements Instrument(3) extends Wind(4) Instrument[](5) new图中父接口 Instrument代表乐器,Java中设计为接口。Java中定义接口也即定义了抽象数据类型,用 interface关键字。 Instrument包含表示进行演奏的接口方法 playO和表示调音的接口方法 adjust,接口方法默认为 public,且没有方法实现。其中play的参数Note实现为枚举类型(enum),以枚举各种音调。这两个方法由具体实现类完成实现,所以 Instrument的 playO和 adjust为方法声明,没有实现体,实现由子类完成:void play (Note n);void run();Wind、 Percussion和 Stringed是实现接口 Instrument的三个类,用 implements关键字。Java中实现接口的类必须全部实现接口中的方法,才能成为具体类,否则未被实现的方法需要加上 abstract关键字,并且相应类必须为抽象类。Wind、 Percussion和 Stringed均为具体类,都要实现 Instrument的 play()方法和 adjust()方法,只是各自演奏和调音方式有所不同,所以都包含了 Instrument的 play()方法接口和 adjust()方法接口,并加以实现:public void play( Note n){/*代码略*/}public void adjust(){/*代码略*/}Wind的两个子类型 Woodwind和 Brass都继承自Wind,Java中继承用 extends关键字,从而 Woodwind和 Brass也都实现了 Instrument的 play()方法和 adjust()方法。图中Woodwind类对应的 Woodwind的实现中只有play()方法,没有adjust()方法的实现,因此其父类Wind的 adjust方法自动复制并被调用。Music类对各类乐器进行演奏和调音操作。方法tune()为一个乐器的定调,其参数为乐器 Intrument接口类型;方法...

查看完整答案

讨论