(完整word版)Java-2实用教程(第5版)习题解答 下载本文

用类描述计算机中CPU的速度和硬盘的容量。要求Java应用程序有4个类,名字分别是PC,CPU和HardDisk和Test,其中Test是主类。

? PC类与CPU和HardDisk类关联的UML图(图4.33)

其中,CPU类要求getSpeed()返回speed的值;要求setSpeed(int m)方法将参数m的值赋值给speed。HardDisk类要求getAmount()返回amount的值,要求setAmount(int m)方法将参数m的值赋值给amount。PC类要求setCUP(CPU c) 将参数c的值赋值给cpu,要求setHardDisk (HardDisk h)方法将参数h的值赋值给HD,要求show()方法能显示cpu的速度和硬盘的容量。

? 主类Test的要求

① main方法中创建一个CPU对象cpu,cpu将自己的speed设置为2200,

② main方法中创建一个HardDisk对象disk,disk将自己的amount设置为200, ③ main方法中创建一个PC对象pc,

④ pc调用setCUP(CPU c)方法,调用时实参是cpu,

⑤ pc调用setHardDisk (HardDisk h)方法,调用时实参是disk,

⑥ pc调用show()方法。 CPU PC cpu:CPU HD:HardDisk setCPU(CPU):void setHardDisk(HardDisk):void show():void speed:int setSpeed(int):void getSpeed():int HardDisk amount:int setAmount(int):void getAmount():int

CPU.java 图4.33 PC与CPU和HardDisk关联UML图 public class CPU { int speed; int getSpeed() { return speed; }

public void setSpeed(int speed) { this.speed = speed; } }

HardDisk.java

public class HardDisk { int amount; int getAmount() { return amount;

}

public void setAmount(int amount) { this.amount = amount; } }

PC.java

public class PC { CPU cpu; HardDisk HD;

void setCPU(CPU cpu) { this.cpu = cpu; }

void setHardDisk(HardDisk HD) { this.HD = HD; }

void show(){

System.out.println(\速度:\ System.out.println(\硬盘容量:\ } }

Test.java

public class Test {

public static void main(String args[]) { CPU cpu = new CPU(); HardDisk HD=new HardDisk(); cpu.setSpeed(2200); HD.setAmount(200); PC pc =new PC(); pc.setCPU(cpu); pc.setHardDisk(HD); pc.show(); } }

习题5(第5章)

一、问答题

1.子类可以有多个父类吗?

2.java.lang包中的Object类是所有其他类的祖先类吗?

3.如果子类和父类不在同一个包中,子类是否继承父类的友好成员? 4.子类怎样隐藏继承的成员变量?

5.子类重写方法的规则是怎样的?重写方法的目的是什么? 6.父类的final方法可以被子类重写吗? 7.什么类中可以有abstract方法? 8.对象的上转型对象有怎样的特点? 9.一个类的各个子类是怎样体现多态的? 10.面向抽象编程的目的和核心是什么?

1.不可以。 2.是。 3.不继承。

4.声明与父类同名的成员变量。

5.子类重写的方法类型和父类的方法的类型一致或者是父类的方法的类型的子类型,重写的方法的名字、参数个数、参数的类型和父类的方法完全相同。重写方法的目的是隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。 6.不可以。 7.abstract类。

8.上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。上转型对象可以访问子类继承或隐藏的成员变量,可以调用子类继承的方法或子类重写的实例方法。 9.通过重写方法。

10.面向抽象编程目的是为了应对用户需求的变化,核心是让类中每种可能的变化对应地交给抽象类的一个子类类去负责,从而让该类的设计者不去关心具体实现。 二、选择题

1.下列哪个叙述是正确的?c

E. 子类继承父类的构造方法。

F. abstract类的子类必须是非abstract类。

G. 子类继承的方法只能操作子类继承和隐藏的成员变量。

H. 子类重写或新增的方法也能直接操作被子类隐藏的成员变量。 2.下列哪个叙述是正确的?d

A. final 类可以有子类。

B. abstract类中只可以有abstract方法。

C. abstract类中可以有非abstract方法,但该方法不可以用final修饰。 D. 不可以同时用final和abstract修饰同一个方法。 E. 允许使用static修饰abstract方法。 用final修饰的类是不允许被继承的,A错误 abstract类中也可以有普通成员方法,B错误

abstract类中的非abstract方法是可以用final修饰的,而abstract方法是不可以被final修饰的,C错误

D同上,所以正确

不允许使用static修饰abstract方法,E错误。

3.下列程序中注释的哪两个代码(A,B,C,D)是错误的(无法通过编译)?cd

class Father {

private int money =12; float height; int seeMoney(){

return money ; //A } }

class Son extends Father { int height; int lookMoney() {

int m = seeMoney(); //B return m; } } class E {

public static void main(String args[]) { Son erzi = new Son(); erzi.money = 300; //C erzi.height = 1.78F; //D } }

4.假设C是B的子类,B是A的子类,cat是C类的一个对象,bird是B类的一个对象,下列哪个叙述是错误的?d

E. cat instanceof B的值是true。 F. bird instanceof A的值是true。 G. cat instanceof A的值是true。 H. bird instanceof C的值是true。

5.下列程序中注释的哪个代码(A,B,C,D)是错误的(无法通过编译)?b

class A { static int m; static void f(){

m = 20 ; //A } }

class B extends A {

void f() //B { m = 222 ; //C }