首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明和Java程序,填写程序中的空,将解答写入答题纸的对应栏内。 【说明】 以下Java代码实现一个简单乐器系统,音乐类(Music)可以使用各类乐器(Instrument)进行演奏和调音等操作。对部分乐器进行建模,其类图如图5-1所示,包括:乐器
阅读以下说明和Java程序,填写程序中的空,将解答写入答题纸的对应栏内。 【说明】 以下Java代码实现一个简单乐器系统,音乐类(Music)可以使用各类乐器(Instrument)进行演奏和调音等操作。对部分乐器进行建模,其类图如图5-1所示,包括:乐器
admin
2020-05-13
105
问题
阅读以下说明和Java程序,填写程序中的空,将解答写入答题纸的对应栏内。
【说明】
以下Java代码实现一个简单乐器系统,音乐类(Music)可以使用各类乐器(Instrument)进行演奏和调音等操作。对部分乐器进行建模,其类图如图5-1所示,包括:乐器(Instrument)、打击乐器(Percussion)、弦乐器(Stringed)、管乐器(Wind)、木管乐器(Woodwind)、铜管乐器(Brass)。
[Java代码]
import java.util.ArrayList;
enum Note { /*枚举各种音调*/
MIDDLE_C,C_SHARP,B_FLAT; //其他略
}
abstract class Instrument {/*乐器*/
________________; //play方法
abstract void adjust(); //adjust抽象方法
}
class Wind ________________{
publicvoid play(Note n){System.out.println(“Wind.play()”+n);}
public void adjust(){System.out.println(“Wind.adjust()”);}
}
/*类Percussion和Stringed实现代码略*/
class Brass ________________(
public void play(Note n)f System.out.println(“Brass.play()”+n); }
public void adjust(){System.out.println(“Brass.adjust()”),}
}
class Woodwind extends Wind {
publicvoidplay(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(________________e){
for(int j=0;j<e.size();j++) {
Instrument i=e.get(j);
adjust(i);
tune(i);
}
}
public static void main(String[]args){
________________musiC=new Music();
ArrayList<Instrument>orchestra=new ArrayList<>();
Orchestra.add(new Wind());
Orchestra.add(new Woodwind());
Music.tuneAll(archestra);
}
}
选项
答案
abstract void play(Note n) extends Instrument extends Wind ArrayList<Instrument> Music
解析
本题考查Java语言程序设计的能力,涉及类、对象、方法的定义和相关操作。要求考生根据给出的案例和代码说明,阅读并完成程序填空。
本题目中涉及的部分乐器,音乐类利用各类乐器进行演奏和调音等操作。根据说明进行设计,题目给出了类图(如图5—1所示)。
图中父类Instrument代表乐器,Java中设计为抽象类。Java中定义抽象类用abstract关键字。Instrument包含表示进行演奏的抽象方法play()和表示调音的抽象方法adjust(),抽象方法没有方法实现,直接用“;”结束,即没有{}括起来的实现体。其中play()的参数Note实现为枚举类型(enum),以枚举各种音调。这两个方法由具体子类完成实现:
abstract void play(Note n);
abstract void adjust();
Wind、Percussion和Stringed是继承Instrument的三个子类,Woodwind和Brass是继承Wind的两个子类,继承用关键字extends。Java中继承抽象类的类必须全部实现抽象类中的抽象方法,才能成为具体类进行实例化,否则未被实现的方法仍然需要保留abstract关键字,并且相应类也仍然必须为抽象类且保留abstract关键字。Wind、Percussion和Stringed均为具体类,都要实现Instrument的play()方法和adjust()方法,只是各自演奏和调音方式有所不同,所以都包含了Instrument的play()方法和adjust()方法,并加以实现:
public void play(Note n){/*代码略*/}
public void adjust(){/*代码略*/}
图5-1中Woodwind类对应的Woodwind的实现中只有play()方法,覆盖(Override)了父类中的play(),没有adjust()方法的实现,因此其父类Wind的adjust()方法自动复制并被调用,而Brass中play()和adjust()均有实现,即都覆盖了父类中的方法。
Music类对各类乐器进行演奏和调音操作。方法tune()为一个乐器的定调,其参数为抽象类Intrument类型;方法adjust()为一个乐器进行调音,其参数也为抽象类Intrument类型;函数tuneAll()为所有乐器定调,其参数是所有乐器容器。tuneAll()方法的调用来自其中maha()方法,其中参数为所构造的ArrayList<Instrument>类型的容器,容器中对象元素类型为Instrument,在源代码开头的导入类型中,import java.util.ArrayList;只导入了ArrayList,所以tuneAll的参数类型为ArrayList<Instrument>,若上下文中List有效,也可用List<Insmunent>。并采用for循环获取容器中每一个乐器并进行adiust()和tune()调用,即:void tuneAll(ArrayList<Instrument>e ) {
for(int j=0; j<e.size(); j++){
Instrument i=e.get(j);
adjust(i);
tune(i);
}
}
Music中的tune()和adjust()的参数均为抽象类Instrument类型引用i,再通过i.play()和i.adjust()的方法调用,其真正执行的方法根据所传实际对象而定,即动态绑定。
主控逻辑代码在Music类中程序主入口main()方法中实现。在main()方法中,先初始化Music类的对象,引用名称为music,即:
Music music=new MusiC();
并初始化各类乐器对象容器orcheslra,各类乐器用父类Instrument类型,因为向上转型是安全的,可以自动向上转型成为Instrument类型,用父类型表示其各个子类型,即:
ArrayList<Instrument>orchestra=new ArrayList<>();
然后使用ArrayList中add()方法向容器中加入具体乐器对象,此处以Wind及其子类Woodwind为例:
Orchestra.add(new Wind());
Orchestra.add(new Woodwind());
然后调用music的tuneAll()方法:music.tuneAll(orchestra);,实现为orchestra中的每个乐器定调,其参数为orchestra容器。orchestra中元素的类型为Instrument,所以tuneAll()的参数也应该为Instrument类型相应的容器,而非其子类型。在tuneAll()方法体内部,为每个元素调用当前对象的tune()和adjust()。
综上所述,空(1)需要定义抽象方法play(Note n),题目代码中已经给出用分号结尾,所以空(1)为abstract void play(Note n);空(2)需要继承抽象类Instrument,即extendsInstrument;空(3)需要继承Wind,即extends Wind;空(4)需要定调的乐器容器,即ArrayList<Instrument>;空(5)处为创建Music类的对象,即Music。
转载请注明原文地址:https://kaotiyun.com/show/X2jZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
在Excel2007中,利用填充柄可以将数据复制到相邻单元格中。若选择含有数值的上下相邻的两个单元格,按住鼠标左键向下拖动填充柄,则数据将以(49)________________填充。
下列关于系统软件的叙述中,正确的是(7)。
某企业的大数据工程项目包括如下四个阶段的工作:①数据获取,②数据清洗与整理,③数据分析,④数据展现。一般来说,工作量较大、花费时间较长的阶段是______(1),技术含量最高的阶段是______(2),准备向有关部门递交成果的阶段是______(3)。
企业信息化总体架构中,计算机硬件、网络系统、操作系统、数据库管理系统等属于(16)。
在Excel中,设单元格A1中的值为80,B1中的值为35,若在C1单元格中输入函数“=IF(AND(A1>=60,B1>=60),“不及格”,“补考”)”,按回车键后,C1单元格中的值为()。
张、王、李三个平等的评委独立对三部电影甲、乙、丙进行了评分(三人的满分标准不同),结果如下表:按合理的平均得分计算,第一、二、三名电影应分别授予(69)。
某工厂信息处理技术员设计了如下统计表:该表设计中包含的问题以及改进方法是______。
在Access中,查询“学生”数据表的所有记录及字段的SQL语句是______。
下面记录的是某班36人期末考试的数学成绩:971009596100879610089100936999891008188
计算机在接通电源后,系统首先由(41)程序对内部每个设备进行测试。
随机试题
女性,18岁,体检发现心脏杂音来诊。平时不能耐受较大的体力活动,无双下肢水肿及夜间呼吸困难史,易感冒。查体:血压:130/80mmHg,心率90次/分。S1↓,S2稍↑。A:SM3/6反流样向左腋下传导,L4、5可闻收缩期Click音,下蹲位站立后Cli
红细胞上无H抗原称为
下列方法中,对Rh血型系统较为敏感的是
制备肠溶胶囊时,使用甲醛处理的目的是
下列关于价值工程的含义描述不正确的是( )。
科学管理的标志之一是()。
在下列账目中,出纳人员可以登记的是()。
王某现年17岁,高二学生,平时创新能力极强,其研究创造的一个小发明获得专利,并且经济价值较高。专利权的申请、使用和由此所获取的收入的处理一概由王某的父亲予以安排,王某的父亲从事的下列各种行为中,违背了监护责任的是()。
A、 B、 C、 D、 AA项可由左侧图形折成;B项,直线应与阴影相接,错误;C项,左侧面中三角形应含阴影,错误;D项,右侧面中阴影三角形应在上部,错误。
2017年4月1日,中共中央、国务院决定在此设立的国家级新区。设立雄安新区()
最新回复
(
0
)