Java程序设计基础(微课版)(第2版)第6章习题与答案_第1页
Java程序设计基础(微课版)(第2版)第6章习题与答案_第2页
Java程序设计基础(微课版)(第2版)第6章习题与答案_第3页
Java程序设计基础(微课版)(第2版)第6章习题与答案_第4页
Java程序设计基础(微课版)(第2版)第6章习题与答案_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章习题练习与参考答案第一部分:习题一、选择题1.abstract方法正确的声明是()A.publicabstractvoidadd();B.publicabstractadd();C.publicabstractvoidadd(){}D.publicvirtualadd();2.在源程序中定义类B和类C,编译时得到的结果是()A.类B和类C都可以成功地编译B.类B和类C都不能编译C.类B可以编译,类C不能编译D.类C可以编译,类B不能编译3.关于匿名内部类叙述正确的是()A.匿名内部类可以继承一个基类,不可以实现一个接口B.匿名内部类不可以定义构造器C.匿名内部类不能用于实参D.以上说法都不正确4.下面哪种情况下该类不能是抽象类()A.当一个类的一个或多个方法是抽象方法时B.当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法体时C.当一个类实现多个接口时D.当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法体时5.Java1.8版本之前的前提,Java特性中,不是abstractclass和interface的区别是()A.抽象类可以有构造方法,接口中不能有构造方法B.抽象类中可以有普通成员变量,接口中没有普通成员变量C.抽象类中不可以包含静态方法,接口中可以包含静态方法D.一个类可以实现多个接口,但只能继承一个抽象类6.以下关于多态的描述,哪一项是错误的()A."子类引用=new父类()"就是多态的一种使用形式B.Java中的多态,得益于向上转型C.Java中的多态,得益于运行时动态绑定D.多态可以使程序更灵活第2题代码:abstractclassB{

abstractvoidshow();

}

abstractclassCextendsB{}二、编程题1.编写一个Employee类,声明为抽象类,包含如下3个属性:name、id、salary。提供必要的构造器和抽象方法:work()。对于Manager类来说,他既是员工,还具有奖金(bonus)的属性。请使用继承的思想,设计CommonEmployee类和Manager类,要求类中提供必要的方法进行属性访问。2.编写一个Vehicle车辆类,将该类置为abstract抽象类,封装车辆类中必要的成员属性,并添加对应的setter()和getter()方法。封装一个抽象方法getToll()实现获取通行费的功能。在两个子类Car类和Truck类中,继承Vehicle类并实现getToll()方法,实现Car类和Truck类对象不同的收取高速通行费的功能(高速公路收费按照车型单公里的费用×行驶的公里数)。3.设计一个Shape接口和它的两个实现类Square和Circle,要求如下:(1)Shape接口中有一个抽象方法area(),方法接收有一个double类型的参数,返回一个double类型的结果。(2)Square和Circle中实现了Shape接口的area()抽象方法,分别求正方形和圆形的面积并返回。在测试类中创建Square和Circle对象,计算边长为2的正方形面积和半径为3的圆形面积。4.编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法voidprintCapitalLetter(),在接口InterfaceB中有个方法voidprintLowercaseLetter();然后封装一个类Print实现接口InterfaceA和InterfaceB,要求printCapitalLetter()方法实现输出大写英文字母表的功能,printLowercaseLetter()方法实现输出小写英文字母表的功能。再写一个主类TestInterface,在主类TestInterface的main方法中创建Print的对象并赋值给InterfaceA的变量a,对象a调用printCapitalLetter方法;最后再在主类TestInterface的main方法中创建Print的对象并赋值给InterfaceB的变量b,对象b调用printLowercaseLetter方法。5.实现名为Person的类和它的子类Employee,Manager是Employee的子类,设计一个接口Add用于涨工资的操作。普通员工每次能涨10%,经理能涨20%,具体要求如下。(1)Person类属性:姓名name(string类型)、地址address(string类型)并写该类构造。(2)Employee类属性:工号ID(string类型)、工资wage(double类型)、工龄service_year(int型)并写出该类的构造方法。(3)Manager类属性:级别level(string类型),写出该类的构造方法。编写一个测试类,产生一个员工和一个经理并输出其具有的信息。

第二部分:参考答案一、选择题答案与解析1.答案:A解析:抽象方法声明格式:修饰符abstract返回值类型方法名(参数列表);。B缺少返回值;C有方法体{}不是抽象方法;D的virtual不是Java关键字。2.答案:A解析:类B是抽象类,有抽象方法show();类C继承B但也是abstract,不需要实现抽象方法。两个类都可以编译成功。3.答案:B解析:匿名内部类没有类名,所以无法定义构造器。A错误(可以实现接口);C错误(可以作为实参);B正确。4.答案:C解析:实现多个接口的类,如果实现了所有接口方法,可以不是抽象类。A、B、D三种情况都必须声明为abstract。5.答案:C解析:Java8之前,抽象类和接口都可以有静态方法。A、B、D都是正确区别。注意:Java8后接口可以有default方法和静态方法。6.答案:A解析:多态是"父类引用=new子类()",不是"子类引用=new父类()"。后者需要强制类型转换。B、C、D都是多态的正确描述。二、编程题参考答案第1题参考答案程序代码://抽象员工类

abstractclassEmployee{

protectedStringname;

protectedStringid;

protecteddoublesalary;

publicEmployee(Stringname,Stringid,doublesalary){

=name;

this.id=id;

this.salary=salary;

}

//抽象方法

publicabstractvoidwork();

//getter和setter

publicStringgetName(){returnname;}

publicvoidsetName(Stringname){=name;}

publicStringgetId(){returnid;}

publicvoidsetId(Stringid){this.id=id;}

publicdoublegetSalary(){returnsalary;}

publicvoidsetSalary(doublesalary){this.salary=salary;}

}

//普通员工类

classCommonEmployeeextendsEmployee{

publicCommonEmployee(Stringname,Stringid,doublesalary){

super(name,id,salary);

}

@Override

publicvoidwork(){

System.out.println("普通员工"+name+"在进行日常工作");

}

}

//经理类

classManagerextendsEmployee{

privatedoublebonus;//奖金

publicManager(Stringname,Stringid,doublesalary,doublebonus){

super(name,id,salary);

this.bonus=bonus;

}

@Override

publicvoidwork(){

System.out.println("经理"+name+"在进行管理工作,奖金:"+bonus);

}

publicdoublegetBonus(){returnbonus;}

publicvoidsetBonus(doublebonus){this.bonus=bonus;}

}

//测试类

publicclassEmployeeTest{

publicstaticvoidmain(String[]args){

Employeeemp=newCommonEmployee("张三","E001",5000);

Employeemgr=newManager("李四","M001",10000,5000);

emp.work();

mgr.work();

}

}运行结果:普通员工张三在进行日常工作经理李四在进行管理工作,奖金:5000.0第2题参考答案程序代码://抽象车辆类

abstractclassVehicle{

protectedStringbrand;//品牌

protectedStringcolor;//颜色

protecteddoublemiles;//行驶公里数

//抽象方法:计算通行费

publicabstractdoublegetToll();

//getter和setter

publicStringgetBrand(){returnbrand;}

publicvoidsetBrand(Stringbrand){this.brand=brand;}

publicStringgetColor(){returncolor;}

publicvoidsetColor(Stringcolor){this.color=color;}

publicdoublegetMiles(){returnmiles;}

publicvoidsetMiles(doublemiles){es=miles;}

}

//轿车类

classCarextendsVehicle{

privatedoublepricePerKm=0.5;//每公里0.5元

publicCar(Stringbrand,Stringcolor,doublemiles){

this.brand=brand;

this.color=color;

es=miles;

}

@Override

publicdoublegetToll(){

returnpricePerKm*miles;

}

}

//货车类

classTruckextendsVehicle{

privatedoublepricePerKm=1.5;//每公里1.5元

publicTruck(Stringbrand,Stringcolor,doublemiles){

this.brand=brand;

this.color=color;

es=miles;

}

@Override

publicdoublegetToll(){

returnpricePerKm*miles;

}

}

//测试类

publicclassVehicleTest{

publicstaticvoidmain(String[]args){

Vehiclecar=newCar("奥迪","黑色",100);

Vehicletruck=newTruck("解放","红色",100);

System.out.println("轿车通行费:"+car.getToll()+"元");

System.out.println("货车通行费:"+truck.getToll()+"元");

}

}运行结果:轿车通行费:50.0元货车通行费:150.0元第3题参考答案程序代码://形状接口

interfaceShape{

doublearea(doublea);

}

//正方形类

classSquareimplementsShape{

@Override

publicdoublearea(doubleside){

returnside*side;

}

}

//圆形类

classCircleimplementsShape{

@Override

publicdoublearea(doubleradius){

returnMath.PI*radius*radius;

}

}

//测试类

publicclassShapeTest{

publicstaticvoidmain(String[]args){

Shapesquare=newSquare();

Shapecircle=newCircle();

System.out.println("边长为2的正方形面积:"+square.area(2));

System.out.println("半径为3的圆形面积:"+String.format("%.2f",circle.area(3)));

}

}运行结果:边长为2的正方形面积:4.0半径为3的圆形面积:28.27第4题参考答案程序代码://接口A

interfaceInterfaceA{

voidprintCapitalLetter();

}

//接口B

interfaceInterfaceB{

voidprintLowercaseLetter();

}

//实现类(实现两个接口)

classPrintimplementsInterfaceA,InterfaceB{

@Override

publicvoidprintCapitalLetter(){

for(charc='A';c<='Z';c++){

System.out.print(c+"");

}

System.out.println();

}

@Override

publicvoidprintLowercaseLetter(){

for(charc='a';c<='z';c++){

System.out.print(c+"");

}

System.out.println();

}

}

//测试类

publicclassTestInterface{

publicstaticvoidmain(String[]args){

InterfaceAa=newPrint();

a.printCapitalLetter();

InterfaceBb=newPrint();

b.printLowercaseLetter();

}

}运行结果:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz第5题参考答案程序代码://涨工资接口

interfaceAdd{

voidaddSalary();

}

//Person类

classPerson{

protectedStringname;

protectedStringaddress;

publicPerson(Stringname,Stringaddress){

=name;

this.address=address;

}

}

//Employee类

classEmployeeextendsPersonimplementsAdd{

protectedStringID;

protecteddoublewage;

protectedintservice_year;

publicEmployee(Stringname,Stringaddress,StringID,doublewage,intservice_year){

super(name,address);

this.ID=ID;

this.wage=wage;

this.service_year=service_year;

}

@Override

publicvoidaddSalary(){

wage*=1.1;//涨10%

}

publicvoidshowInfo(){

System.out.println("姓名:"+name);

System.out.println("地址:"+address);

System.out.println("工号:"+ID);

System.out.println("工资:"+wage);

System.out.println("工龄:"+service_year+"年");

}

}

//Manager类

classManagerextendsEmployee{

privateStringlevel;

publicManager(Stringname,Stringaddress,StringID,doublewage,intservice_year,Stringlevel){

super(name,address,ID,wage,service_year);

this.level=leve

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论