面向对象的高级特性-参考答案_第1页
面向对象的高级特性-参考答案_第2页
面向对象的高级特性-参考答案_第3页
面向对象的高级特性-参考答案_第4页
面向对象的高级特性-参考答案_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

面对对象的高级特性_参考答案Ⅰ.选择题1、给定下列代码:

B当在第6行加入什么方法时会引起编译错误?2、给定以下代码:

B执行后的结果是?A.打印字符串TestedB.编译失败C.代码运行胜利但无输出D.运行时抛出异样3、MAX_LENGTH是int型public成员变量,变量值保持为常量100,用简短语句定义这个变量?(CD)A.publicintMAX_LENGTH=100;B.finalintMAX_LENGTH=100;C.finalpublicintMAX_LENGTH=100;D.publicfinalintMAX_LENGTH=100.4、给出以下代码,请问该程序的运行结果是什么?(B)1.classA{staticvoidfoo(inti){};}2.classBextendsA{voidfoo(inti){};}A第1行编译错误。

B第2行编译错误。

C代码编译胜利。

//静态方法不能被重写4、有关类的说法正确的是(B)A.类具有封装性,所以类的数据是不能被访问的B.类具有封装性,但可以通过类的公共接口访问类中的数据C.声明一个类时,必需运用public修饰符D.每个类中必需有main方法,否则程序无法运行5、将类的访问权限设置为默认的,则该成员能被(A)A.同一包中的类访问B.其他包中的类访问C.全部的类访问D.全部的类的子类访问6、假设下面的程序代码都放在MyClass.java文件中,(D)程序代码能够编译通过。

A.importjava.awt.*;packagemypackage;calssMyClass{}B.packagemypackage;importjava.awt.*;publicclassmyClass{}C.intm;packagemypackage;importjava.awt.*;classMyClass{}D./*Thisisacomment*/packagemypackage;importjava.awt.*;publicclassMyClass{}7、假设在java源程序文件MyClass.java中只含有一个类,而且这个类必需能够被位于一个浩大的软件系统中的全部java类访问到,那么下面(C)声明有可能是符合要求的类声明。

A.privateclassMyClassextendsObjectB.publicclassmyclassextendsObjectC.publicclassMyClassD.classMyClassextendsObjectⅡ.程序分析题1、分析并完善如下程序,并写出最终执行结果:

classPerson{Stringname=zhangsan;intage=18;doubleheight=1.75;publicPerson(){System.out.println(Person());}publicPerson(Stringn){System.out.println(Person(Stringn));name=n;}publicPerson(Stringn,inta,doubleh){System.out.println(Person(Stringn,inta,doubleh));name=n;age=a;height=h;}publicvoidsayHello(){System.out.println(Hello!);}}classStudent4extendsPerson{doublescore=0;publicStudent4(){__this__(aa,10);System.out.println(Student());}publicStudent4(Stringn,doubles){__super__(n);score=s;System.out.println(Student(Stringn,doubles));}publicStudent4(Stringn,inta,doubleh,doubles){__this__(n,s);age=a;height=h;score=s;System.out.println(Student(Stringn,inta,doubleh,doubles));}publicvoidstudy(){score++;}publicvoidsayHello(){__this/super__.sayHello();System.out.println(Hello,teacher!);inti=this.age;intj=super.age;}publicstaticvoidmain(Stringargs[]){Student4s4=newStudent4();__s4__.sayHello();}}2、找出程序中的错误,并说明缘由:

publicclassFinalVar{finalinty=100;finalintx1;publicFinalVar(){x1=1;}publicstaticvoidmain(String[]args){finalintz=0;}publicvoidaa(){FinalVar.add(1);}publicstaticvoidadd(finalintx2){x2++;//错了final不许修改}}3、找出程序中的错误,并说明缘由:

(finalclassFinalClass{publicvoidadd(intx){x++;}}publicclassSubFinalDemoextendsFinalClass{//不能被继承publicvoidadd(intx){x+=2;}}4、找出程序中的错误,并说明缘由:

classFinalClass{publicfinalvoidadd(intx){x++;}}publicclassSubFinalDemoextendsFinalClass{publicvoidadd(intx){//不能在子类中被覆盖,即不能修改。

x+=2;}}Ⅲ.编程题1、如下两个类之间存在肯定的联系,请用面对对象的特性实现类及其关系:

publicclassPerson{Stringname;intage;doubleheight;Person(){}publicvoidsayHello(){}}publicclassStudentextendsPerson{doublescore;publicvoidstudy(){}}2、(1)定义一个汽车类Vehicle,要求如下:

(a)属性包括:

汽车品牌brand(String类型)、颜色color(String类型)和速度speed(double类型)。

(b)至少供应一个有参的构造方法(要求品牌和颜色可以初始化为随意值,但速度的初始值必需为0)。

(c)为属性供应访问器方法。

留意:

汽车品牌一旦初始化之后不能修改。

(d)定义一个一般方法run(),用打印语句描述汽车奔跑的功能定义测试类VehicleTest,在其main方法中创建一个品牌为benz、颜色为black的汽车。

publicclassVehicle{privateStringbrand;privateStringcolor;privatedoublespeed;Vehicle(){}Vehicle(Stringbrand,Stringcolor){this.brand=brand;this.color=color;speed=0;}publicStringgetColor(){returncolor;}publicvoidsetColor(Stringcolor){this.color=color;}publicdoublegetSpeed(){returnspeed;}publicvoidsetSpeed(doublespeed){this.speed=speed;}publicvoidrun(){System.out.println(getColor()+的+getBrand()+的速度是+getSpeed());}publicStringgetBrand(){returnbrand;}}(2)定义一个Vehicle类的子类轿车类Car,要求如下:

(a)轿车有自己的属性载人数loader(int类型)。

(b)供应该类初始化属性的构造方法。

(c)重新定义run(),用打印语句描述轿车奔跑的功能。

(d)定义测试类Test,在其main方法中创建一个品牌为Honda、颜色为red,载人数为2人的轿车。

publicclassCarextendsVehicle{intloader;Car(){}Car(Stringbrand,Stringcolor,intloader){super(brand,color);this.loader=loader;}publicvoidrun(){System.out.println(getColor()+的载人数+loader+getBrand()+的速度是+getSpeed());}}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubCarcar=newCar(Honda,red,2);car.run();}3、设计四个类,分别是:

(1)Shape表示图形类,有面积属性area、周长属性per,颜色属性color,有两个构造方法(一个是默认的、一个是为颜色赋值的),还有3个抽象方法,分别是:

getArea计算面积、getPer计算周长、showAll输出全部信息,还有一个求颜色的方法getColor。

publicabstractclassShape{doublearea;doubleper;charcolor;Shape(){}Shape(charcolor){this.color=color;}publicabstractdoublegetArea();publicabstractdoublegetPer();publicabstractvoidshowAll();publicchargetColor(){returncolor;}}(2)2个子类:

1)Rectangle表示矩形类,增加两个属性,Width表示长度、height表示宽度,重写getPer、getArea和showAll三个方法,另外又增加一个构造方法(一个是默认的、一个是为高度、宽度、颜色赋值的)。

publicclassRectangleextendsShape{doublewidth;doubleheight;Rectangle(){}Rectangle(doublewidth,doubleheight,charcolor){super(color);this.width=width;this.height=height;}@OverridepublicdoublegetArea(){area=width*height;returnarea;}@OverridepublicdoublegetPer(){per=2*(width+height);returnper;}@OverridepublicvoidshowAll(){System.out.println(长:

+width);System.out.println(宽:

+height);System.out.println(面积:+getArea());System.out.println(周长:+getPer());System.out.println(颜色:+getColor());}}2)Circle表示圆类,增加1个属性,radius表示半径,重写getPer、getArea和showAll三个方法,另外又增加两个构造方法(为半径、颜色赋值的)。

publicclassCircleextendsShape{finaldoublepi=3.14;doubleradius;Circle(){}Circle(doubleradius,charcolor){super(color);this.radius=radius;}@OverridepublicdoublegetArea(){area=pi*radius*radius;returnarea;}@OverridepublicdoublegetPer(){per=2*pi*radius;returnper;}@OverridepublicvoidshowAll(){System.out.println(半径:

+radius);System.out.println(面积:+getArea());System.out.println(周长:+getPer());System.out.println(颜色:+getColor());}}(3)一个测试类PolyDemo,在main方法中,声明创建每个子类的对象,并调用2个子类的showAll方法。

publicclassPolyDemo{publicstaticvoidmain(String[]args){Rectangler=newRectangle(1,2,‘蓝’);Circlec=newCircle(1.2,‘红’);r.showAll();System.out.println(-----------------);c.showAll();System.out.println(-----------------);}}4、Cola公司的雇员分为以下若干类:

(1)ColaEmployee:

这是全部员工总的父类,属性:

员工的姓名,员工的生日月份。

方法:

getSalary(intmonth)依据参数月份来确定工资,假如该月员工过生日,则公司会额外嘉奖100元。

(2)SalariedEmployee:

ColaEmployee的子类,拿固定工资的员工。

属性:

月薪(3)HourlyEmployee:

ColaEmployee的子类,按小时拿工资的员工,每月工作超出160小时的部分依据1.5倍工资发放。

属性:

每小时的工资、每月工作的小时数(4)SalesEmployee:

ColaEmployee的子类,销售人员,工资由月销售额和提成率确定。

属性:

月销售额、提成率(5)定义一个类Company,在该类中写一个方法,调用该方法可以打印出某月某个员工的工资数额,写一个测试类TestCompany,在main方法,把若干各种类型的员工放在一个ColaEmployee数组里,并单元出数组中每个员工当月的工资。

publicabstractclassColaEmployee{Stringname;intyear;intmonth;intday;ColaEmployee(){}ColaEmployee(Stringname,intyear,intmonth,intday){this.name=name;this.day=day;this.month=month;this.year=year;}abstractdoublegetSalary(intmonth);}publicclassSalariedEmployeeextendsColaEmployee{doublesalary;SalariedEmployee(){}SalariedEmployee(Stringname,intyear,intmonth,intday,doublesalary){super(name,year,month,day);this.salary=salary;}@OverridedoublegetSalary(intmonth){if(month==this.month){salary+=100;}returnsalary;}}publicclassSalesEmployeeextendsColaEmployee{doublemonthSalary;doublerate;SalesEmployee(){}publicclassHourlyEmployeeextendsColaEmployee{doublehourSalary;inthour;HourlyEmployee(){}HourlyEmployee(Stringname,intyear,intmonth,intday,doublehourSalary,inthour){super(name,year,month,day);this.hourSalary=hourSalary;this.hour=hour;}@OverridedoublegetSalary(intmonth){doublesalary=0;if(hour=160){salary=hour*hourSalary;}else{salary=160*hourSalary+(hour-160)*hourSalary*1.5;}if(month==this.month){salary+=100;}returnsalary;}}SalesEmployee(Stringname,intyear,intmonth,intday,doublemonthSalary,doublerate){super(name,year,month,day);this.monthSalary=monthSalary;this.rate=rate;}@OverridedoublegetSalary(intmonth){doublesalary=monthSalary*rate;if(month==this.month){salary+=100;}returnsalary;}}publicclassCompany{staticvoidgetSalary(intmonth,ColaEmployeec){System.out.println(month+月+c.name+的工资:+c.getSalary(month));}}publicclassTestCompany{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubColaEmployee[]a=newColaEmployee[3];a[0]=newSalariedEmployee(大川,1988,2,29,3500);a[1]=newHourlyEmployee(海鸥,1988,2,29,20,200);a[2]=newSalesEmployee(abc,1988,5,10,30000,0.1);for(ColaEmployeec:a){Company.getSalary(2,c);}}}5、利用接口实现动态的创建对象:

(1)创建4个类1苹果2香蕉3葡萄4园丁(2)在三种水果的构造方法中打印一句话.以苹果类为例classapple{publicapple(){System.out.println(创建了一个苹果类的对象);}}(3)类图如下:

ApplePearOranges+create():FruitGardener接口Fruit(4)要求从限制台输入一个字符串,依据字符串的值来推断创建三种水果中哪个类的对象。

运行结果如图:

publicabstractinterfaceFruit{}publicclassAppleimplementsFruit{Apple(){System.out.println(创建了一个苹果类的对象);}}publicclassBananaimplementsFruit{Banana(){System.out.println(创建了一个香蕉类的对象);}}publicclassPutaoimplementsFruit{Putao(){System.out.println(创建了一个葡萄类的对象);}}publicclassGardener{publicFruitcreat(){Fruitf=null;Scannerinput=newScanner(System.in);Stringname=input.next();if(name.equals(苹果)){f=newApple();}elseif(name.equals(香蕉)){f=newBanana();}elseif(name.equals(葡萄)){f=newPutao();}else{System.out.println(不会种);}returnf;}}6、Person类,如下图:

两个测试类,访问该Person类,要求(1)TestMain和Person在相同包中test2中(2)TestMain在包test1中,Person在包test2中(学问点:

Java中包的概念)7、修改原来的Person类,将其进行良好的封装packagecom.neusot.test2;publicclassPerson{privateStringname;privateintage;privatedoubleheight;publicvoidperson(){}publicvoidsayHello(){}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicdoublegetHeight(){returnheight;}publicvoidsetHeight(doubleheight){this.height=height;}}8、编写三个系别的学生类:

英语系,计算机系,文学系(要求通过继承学生类)各系有以下成果:

英语系:

演讲,期末考试,期中考试;计算机系:

操作实力,英语写作,期中考试,期末考试;文学系:

演讲,作品,期末考试,期中考试;各系总分评测标准:

英语系:

演讲50%期末考试25%期中考试25%计算机系:

操作实力40%英语写作20%期末考试20%期中考试20%文学系:

演讲35%作品35%期末考试15%期中考试15%定义一个可容纳5个学生的学生类数组,运用随机数给该数组装入各系学生的对象,然后按如下格式输出数组中的信息:

学号:XXXXXXXX姓名:

XXX性别:

X年龄:

XX综合成果:

XXpublicabstractclassStudent{Stringname;Stringid;Stringsex;intage;doublelastScore;//期末成果doubleminScore;//期中成果Student(Stringname,Stringid,Stringsex,intage,doublelastScore,doubleminScore){this.name=name;this.age=age;this.id=id;this.sex=sex;this.lastScore=lastScore;this.minScore=minScore;}Student(){}publicabstractdoublegetScore();//获得最终成果publicvoidshow(){System.out.println(学号:+id+姓名:

+name+性别:

+sex+年龄:

+age+综合成果:

+getScore());}}publicclassEnglishextendsStudent{doublespeekScore;English(){}English(Stringname,Stringid,Stringsex,intage,doublelastScore,doubleminScore,doublespeekScore){super(name,id,sex,age,lastScore,minScore);this.speekScore=speekScore;}publicdoublegetScore(){returnlastScore*0.25+minScore*0.25+speekScore*0.5;}}publicclassComputerextendsStudent{doublemakeScore;//操作成果doubleengScore;//英语写作成果Computer(){}Computer(Stringname,Stringid,Stringsex,intage,doublelastScore,doubleminScore,doublemakeScore,doubleengScore){super(name,id,sex,age,lastScore,minScore);this.makeScore=makeScore;this.engScore=engScore;}@OverridepublicdoublegetScore(){//TODOAuto-generatedmethodstubreturnlastScore*0.2+minScore*0.2+engScore*0.2+makeScore*0.4;}}publicclassLiteratureextendsStudent{doublespeekScore;double

温馨提示

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

评论

0/150

提交评论