首页
登录
从业资格
阅读以下说明和Java程序,填补代码中的空缺(1)~(5),将解答填入答题纸的对
阅读以下说明和Java程序,填补代码中的空缺(1)~(5),将解答填入答题纸的对
资格题库
2022-08-02
57
问题
阅读以下说明和Java程序,填补代码中的空缺(1)~(5),将解答填入答题纸的对应栏内。【说明】 对部分乐器进行建模,其类图如图6-1所示,包括:乐器(Instrument)、管乐器(Wind)、打击乐器( Percussion)、弦乐器(Stringed)、木管乐器(Woodwind)、铜管乐器(Brass)。
下面是实现上述设计的Java代码,其中音乐类(Music)使用各类乐器(Instrument)进行演奏和调音等操作。【Java代码】enum Note{ /* 枚举各种音调 */ MIDDLE_C, C_SHARP, B_FLAT; //其他略}interface Instrument { /* 接口,乐器 */ (1) ; //play方法接口 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和Stringet实现代码略 */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.println("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(lnstrument i : e) { adjust(i); tune(i); }}public static void main(String[] args) { Music music= (5) Music(); Instrument[] orchestra={ new Wind(), new Woodwind() }; music.tuneAll(orchestra); }} 本程序运行后的输出结果为:Wind.adjust()Wind.play() MIDDLE_CWind.adjust()Woodwind.play() MIDDLE_C
选项
答案
解析
(1)void play(Note n)
(2)implements Instrument
(3)extends Wind
(4)Instrument[]
(5)new
本题考查Java语言程序设计的能力,涉及类、对象、方法的定义和相关操作。要求考生根据给出的案例和代码说明,认真阅读理清程序思路,然后完成题目。
先考察题目说明。本题目中涉及的部分乐器,音乐类利用各类乐器进行演奏和调音等操作。根据说明进行设计,题目给出了类图(图6-1类图所示)。
图中父接口Instrument代表乐器,Java中设计为接口。Java中定义接口也即定义了抽象数据类型,用interface关键字。Instrument包含表示进行演奏的接口方法play()和表示调音的接口方法adjust(),接口方法默认为public,且没有方法实现。其中play()的参数Note实现为枚举类型(enum),以枚举各种音调。这两个方法由具体实现类完成实现,所以Instrument的play()和adjust()为方法声明,没有实现体,实现由子类完成:
void play(Note n);
void run();
Wind、Percussion和Stringed是实现接口Instmment的三个类,用关键字implements。Java中实现接口的类必须全部实现接口中的方法,才能成为具体类,否则未被实现的方法需要加上abstract关键字,并且相应类必须为抽象类。Wind、Percussion和Stringed均为具体类,都要实现Inistrument的play()方法和adjust()方法,只是各自演奏和调音方式有所不同,所以都包含了Instrument的play()方法接口和adjust()方法接口,并加以实现:
public void play(Note n) { /* 代码略 */ }
public void adjust() { /* 代码略 */ }
Wind的两个子类型Woodwind和Brass都继承自Wind, Java中继承用extends关键字,从而Woodwind和Brass也都实现了Instrument的play()方法和adjust()方法。图6-1中Woodwind类对应的Woodwind的实现中只有play()方法,没有adjust()方法的实现,因此其父类Wind的adjust()方法自动复制并被调用。
Music类对各类乐器进行演奏和调音操作。方法tune()为一个乐器的定调,其参数为乐器Instrument接口类型;方法adjust()为一个乐器进行调音,其参数也为Instrument接口类型;函数tuneAll()为每个乐器定调,其参数是所有乐器数组。Java中数组一旦创建,就可以通过成员length获取数组中成员个数。Java 5.0升始,对集合还支持foreach,对集合中每个元素循环进行处理:
for(Instrument i : e) {
adjust(i);
tune(i),
}
Music中的tune()和adjust()的参数均为Instrument接口类型引用i,调用play()和adjust()方法,其真正执行的方法根据所传实际对象而定,即动态绑定。
主控逻辑代码在Music类中程序主入口main()方法中实现。在main()方法中,先初始化Music类的对象,引用名称music,即:
Music music=new Music();
并初始化各类乐器对象数组orchestra,各类乐器用父接口Instrument类型,因为向上转型是安全的,可以自动向上转型成为Instrument类型,用父接口类型表示其各个子类型,即:
Instrument[] orchestra= { new Wind(), new Woodwind() };
或
Instrument orchestra[]= { new Wind(), new Woodwind() };
然后调用music的tuneAll()方法:music.tuneAll(orchestra),实现为orchestra中的每个乐器定调,其参数为orchestra数组。数组orchestra中元素的类型为Instrument,所以tuneAll()的参数也应该为Instrument类型数组,而非其子类型。在tuneAll()方法体内部,为每个数组元素调用当前对象的tune()和adjust()。
数组orchestra中第一个元素为Wind类型对象,第二个元素为Woodwind类型对象。tuneAll()中for循环的第一次执行时tune()方法中语句i.play(Note.MIDDLE_C);调用Wind中的play()方法,因此输出Wind.play() MIDDLE_C;adjust()方法中语句i.adjust();为调用Wind类的adjust()方法,输出为Wind.adjustootuneAll()中循环的第二次执行tune()方法中语句i.play(Note.MIDDLE_C);时,调用Woodwind中的play()方法,因此输出Woodwind.play() MIDDLE_C;adjust()方法中语句i.adjust();为调用Woodwind类的adjust()方法,Woodwind没有实现adjust()方法,即Wind的adjust()方法,因此输出为Wood.adjust()。
因此,空(1)需要定义接口play(Note n),题目代码中已经给出用分号结尾,所以空(1)为void play(Note n);空(2)需要实现接口Instrument,即implements Instrument;空(3)需要继承Wind,即extends Wind;空(4)需要定调的乐器数组,即Instrument[];空(5)处为创建Music类的对象的关键字new。
转载请注明原文地址:https://tihaiku.com/congyezige/2427269.html
本试题收录于:
初级程序员题库软件水平考试初中高级分类
初级程序员
软件水平考试初中高级
相关试题推荐
关于风管系统计算的描述,下面哪些描述是正确的?()A.程序自带计算功能可以实现同
根据《建筑工程设计信息模型分类和编码标准》,建筑信息模型分类表代码应采用()数字
组织为完成某一目标而制定的具体行动方案称为A.程序化决策 B.非程序化决策
解答服务对象的健康问题,帮助其澄清观念、做出决策的人际传播形式称为A.咨询B.个
程序语言若规定程序中的变量必须先定义(或声明)再引用,则违反此规定的程序在()时
关于汇编语言,以下叙述中正确的是()。A.汇编语言程序可以直接在计算机上运行
若程序中定义了局部变量与全局变量,则()。A.在函数内只能访问局部变量,而不能访
网页中代码"inputtype=textname="foo"size=20
电子邮件应用程序利用POP3协议()。A.创建邮件 B.加密邮件 C.发送邮
负责解释执行JavaScript代码的是()。A.Web服务器 B.Web浏览
随机试题
Whydoesn’tthemancarryacamerawithhim?[br][originaltext]Listentothec
TheUnitedStatesisademocracy,whichmeansthatthecitizensrunthegove
FortravelerstoEurope,fromJanuary2002there’ssomethingspecialonoffe
增感影屏是利用荧光作用原理增加感光效应的,可使X线胶片的感光增益:A.80%左右
在终值和计息期一定的情况下,贴现率越低,则复利现值越小。()
某单位要选拔人才下乡挂职。符合条件的候选人有甲、乙、丙、丁、戊、己,人事部门、组
下列各项中,属于会计基本职能的是( )。A.会计核算与会计预测 B.会计核算
根据《商业银行不良资产监测和考核暂行办法》规定,对表外业务进行风险分析应当包含哪
ABS塑料制小轿车空调用的风向转动板..
某地区探明地下存在较大矿床,矿体埋藏较深,且埋藏条件较为复杂、分散、平面尺寸和高
最新回复
(
0
)