习题四参考答案一、判断题1.对2.对3.错4.错5.对6.错8.错9.对10.对11.错12.对13.错14.对15.对16.错17.对18.对19.错20.错【解释】第3题:本题考查抽象类的特性。抽象类中可包含构造方法、抽象方法和具体实现的方法以及常量和变量,但不能直接实例化,一般可对抽象类的子类实例化,实例化对象引用可以是抽象类类型。第11题:本题考查子类中可以写的方法。子类可以继承父类的方法,也可以覆盖父类的方法,也可以新增加方法,新增加的方法与从父类继承的方法可构成重载。第13题:本题考查abstract的用法。abstract可修饰类和方法,但不能修饰属性,即不能修饰类的成员变量。第16题:本题考查final修饰的方法的特性。final修饰的方法不能被覆盖,但可以有重载的方法。二、选择题1.B2.B3、A4.B5.A6.C7.B8.D9.B10.B11.A12.D13、D14.A15.D16.D17、C18.D19、AD20、CD21、C22、C23、C24、B25.B26.D28.A【解释】第7题:本题考查对继承、覆盖和重载的理解,属于难点。本题4个选项中的方法名与父类定义的方法名都相同。选项A的方法有3个参数,选项C的方法有1个参数,都能与从父类继承的方法构成重载,可以加入子类Child中;选项B和选项D方法中的参数类型和个数都与父类定义的方法相同,由于父类定义的方法用public修饰,要想覆盖父类定义的方法,子类的方法也必须用public修饰,因此,选项D可以加入子类Child中,但选项B不行。第8、10、13和14题:这几题主要考查子类中含有覆盖方法的调用情况。子类对象调用方法时,首先调用子类中同名和参数形式(参数个数、类型和顺序)一致的方法,否则就调用父类中定义的匹配的方法。第9题:本题考查对类实现接口的理解。在Java的接口中包括抽象方法和常量。类实现接口时,需实现接口中的所有方法,并可直接使用接口中定义的常量(等同于从接口中继承了这些常量)。本题中的接口B定义了intk=10;”编译时会自动加上final,表示k为常量。因此,本题选B。第11题:本题考查父类中有static修饰和没有static修饰的方法被子类覆盖的情形。当父类的方法被static修饰时,子类中覆盖的方法也必须用static修饰。反之,父类的方法没有static修饰,子类中覆盖的方法也不用static修饰。所以,本题选A。第12和16题:这2题考查子类继承父类时构造方法的定义。子类继承父类时,若父类定义了有参数的构造方法,而没有定义无参数的构造方法,那么在子类中的构造方法必须用super语句去调用父类定义的有参数的构造方法,否则无法通过编译。因此,建议在定义父类时,如写了构造方法,最好写上一个无参数的构造方法。第18题:本题考查类的继承。选项A中的m仅在父类的方法参数中定义,无法给变量i赋值;选项B中的b是非静态成员变量,在静态的main方法中无法直接给i赋值;父类定义的a是私有的,无法被子类继承,所以选项C也不对。选项D中的方法change是父类定义的公共方法,可以被子类继承和调用。因此,本题选D。第23题:本题考查类的构造方法。程序中第2行为构造方法,第5行为方法名,Test有void修饰,它不是构造方法,可作为实例方法。程序编译能通过。运行时,第9行实例化Test对象,调用第2行的构造方法,输出3;然后执行第9行调用第5行的方法,输出2;最后执行11行,输出1。因此,本题选C。第24题:本题考查子类实例化时的过程三、程序阅读题1.int2.(1)abstract(2)getName(3)extends(4)Stringmajor(5)getMajor3.324.resultOne=0resultTwo=48resultThree=205.PineTreeOops6.MyFunc7.输出结果为:28.hi!IamTomHowdoyoudo?9.第2行改为finaldoublePI=3.14;第5行的extends改为implements第10行的方法声明增加一个public,改为publicdoublearea()10.15111011.221四、编程题1.参考代码如下:publicclassCircle{doubleradius;publicCircle(){radius=0;}publicCircle(doubler){radius=r;}publicdoublegetRadius(){returnradius;}publicdoublegetPerimeter()(return2*Math.PI*radius;}publicdoublegetArea(){returnMath.PI*radius*radius;}publicvoiddisp(){System.out.println(圆的半径为+getRadius()+周长为+getPerimeter()+面积为+getArea());}}publicclassCylinderextendsCircle{doubleheight;publicCylinder(doubler,doubleh){radius=r;height=h;}publicdoublegetHeight(){returnheight;}publicdoublegetCylinderArea(){return2*Math.PI*radius*(radius+height);}publicdoublegetVol(){returnMath.PI*radius*radius*height;}publicvoiddisVol(){System.out.println(圆柱体的体积为+getVol());}}2.参考代码如下:interfaceShape{publicabstractdoublegetArea();}classCircleimplementsShape{privateintr;Circle(intr){this.r=r;}publicdoublegetArea(){return3.14*r*r;}}classTestCircle{publicstaticvoidmain(Stringargs[]){Circlec=newCircle(5);System.out.println(园的面积为:+c.getArea());}}3.参考代码如下:interfaceshape{doublearea();)classTriangleimplementsshape{privatedoublea,b,c;publicTriangle(doublea,doubleb,doublec){this.a=a;this.b=b;this.c=c;}publicdoublearea(){doublep=(a+b+c)/2;returnMath.sqrt(p*(p-a)*(p-b)*(p-c));}}classCircleimplementsshape{privatedoubler;publicCircle(doubler)(this.r=r;}publicdoublearea(){returnMath.PI*r*r;}}classRectangleimplementsshape{privatedoublewidth,height;publicRectangle(doublej,doublek){width=j;height=k;}publicdoublearea(){returnwidth*height;}}publicclassTestShape{publicstaticvoidmain(Stringargs[]){shapes[]=newshape[3];s[0]=newTriangle(3,4,5);s[1]=newCircle(3.5);s[2]=newRectangle(3.5,4.0);for(inti=0;is.length;i++)System.out.println(s[i].area());}}4.不需要做5.(1)参考代码如下:abstractpublicclassAnimal{publicStringname;publicintage;publicdoubleweight;publicvoidshowInfo(){System.out.println(动物名为+name+年龄为+age+岁,重量为+weight);}abstractpublicvoidmove();abstractpublicvoideat();}(2)参考代码如下:publicclassBirdextendsAnimal{publicBird(Stringname,intage,doubleweight){this.name=name;this.age=age;this.weight=weight;}publicvoidshowInfo(){System.out.println(鸟名为+name+年龄为+age+重量为+weight);}publicvoidmove(){System.out.println(name+用翅膀在天空上!);}publicvoideat(){System.out.println(name+喜欢吃虫子!);}}(3)参考代码如下:publicclassTestAnimal{publicstaticvoidmain(Stringargs[]){Animalbird=newBird(麻雀,1,0.3);bird.showInfo();bird.move();bird.eat();}6.参考代码如下:publicclassPeople{publicStringname;publicStringsex;publicStringbothnum;publicPeople(){};publicStringprintInfo(){return姓名:+name+'\n'+性别:+sex+'\n'+出生年月:+bothnum;}}classTeacherextendsPeople{publicStringschool;publicintworkID;publicStringprintInfo(){returnsuper.printInfo()+'\n'+学校:+school+'\n'+工号:+workID;}}classStudentextendsPeople{publicStringschool;publicintId;publicStringdiscipline;publicStringgrade;publicStringclasses;publicStringprintInfo(){returnsuper.printInfo()+'\n'+学校:+school+'\n'+学号:+Id+'\n'+专业:+discipline+'\n'+年纪:+grade+'\n'+班级:+classes;}}classTestPerson{publicstaticvoidmain(Stringargs[]){Teachert=newTeacher();t.name=Tom;t.sex=男;t.bothnum=19820808;t.school=浙江工业大学;t.workID=2008010408;System.out.println(t.printInfo());Students=newStudent();s.name=Jack;s.sex=男;s.bothnum=19920305;s.Id=2011266302;s.school=浙江工业大学;s.discipline=软件工程;s.grade=大一;s.classes=2班;System.out.println(s.printInfo());}}7.参考代码如下:publicclass证件{String编号;String姓名;String出生年月