找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 4307|回复: 1

java私塾跟我学-java篇 第4章课后答案

[复制链接]
solimh 发表于 2011-9-2 15:58:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?快速注册

×
java私塾跟我学-java篇 第4章课后答案

4.1创建一个构造方法重载的类,并用另一个类调用。

  1. public class T1 {
  2.    public static void main(String[] args) {
  3.       Test t1 = new Test();
  4.       System.out.println(t1.toString());
  5.       Test t2 = new Test(5);
  6.       System.out.println(t2.toString());
  7.       Test t3 = new Test(7, 8);
  8.       System.out.println(t3.toString());
  9.    }
  10. }
  11. // 构造方法重载的类
  12. class Test {
  13.    int x, y;
  14.    public Test() {
  15.       this.x = 0;
  16.       this.y = 0;
  17.    }
  18.    public Test(int x) {
  19.       this.x = x;
  20.       this.y = 0;
  21.    }
  22.    public Test(int x, int y) {
  23.       this.x = x;
  24.       this.y = y;
  25.    }
  26.    public String toString() {
  27.       return "(" + x + "," + y + ")";
  28.    }
  29. }
复制代码


4.2创建Rodent(啮齿动物):Mouse(老鼠),Gerbil(鼹鼠),Hamster(大颊鼠)等的的一个继承分级结构。在基础类中,提供适用于所有Rodent的方法,并在衍生类中覆盖它们,从而根据不同类型的Rodent采取不同的行动。创建一个Rodent数组,在其中填充不同类型的Rodent,然后调用自己的基础类方法,看看会有什么情况发生。
  1. public class T2 {
  2.    public static void main(String[] args) {
  3.       Rodent[] r = new Rodent[4];
  4.       r[0] = new Rodent();
  5.       r[1] = new Mouse();
  6.       r[2] = new Gerbil();
  7.       r[3] = new Hamster();
  8.       for (Rodent rr : r) {
  9.          rr.test();
  10.       }
  11.    }
  12. }
  13. class Rodent {
  14.    public void test() {
  15.       System.out.println("Rodent里的方法体test");
  16.    }
  17. }
  18. class Mouse extends Rodent {
  19.    public void test() {
  20.       System.out.println("Mouse里的方法体test");
  21.    }
  22. }
  23. class Gerbil extends Rodent {
  24.    public void test() {
  25.       System.out.println("Gerbil里的方法体test");
  26.    }
  27. }
  28. class Hamster extends Rodent {
  29.    public void test() {
  30.       System.out.println("Hamster里的方法体test");
  31.    }
  32. }
复制代码


4.3编写MyPoint的一个子类MyXYZ,表示三维坐标点,重写toString方法用来显示这个对象的x、y、z的值,如显示(1,2,3),最后用main方法测试。
  1. import cn.yufei.c3.MyPoint;
  2. public class T3 {
  3.    public static void main(String[] args) {
  4.       MyXYZ m = new MyXYZ();
  5.       m.setX(4);
  6.       m.setY(8);
  7.       m.setZ(7);
  8.       System.out.println(m);
  9.    }
  10. }
  11. class MyXYZ extends MyPoint {
  12.    private int z;
  13.    public int getZ() {
  14.       return z;
  15.    }
  16.    public void setZ(int z) {
  17.       this.z = z;
  18.    }

  19.    public String toString() {
  20.       return "(" + getX() + "," + getY() + "," + z + ")";
  21.    }
  22. }
复制代码


4.4 E 代码运行,屏幕上看到null
因为构造函数没有返回值,是为了区分构造函数和其它方法。在构造函数前加上void,编译可以通过,但编译器把它认为是方法,而不是构造函数,当然也无法在new的时候自动调用。

4.5 D 编译不通过

4.6 D line 7
new谁就调用谁的方法

4.7 运行结果:x=4
(注意b=false中用的是赋值运算符,而不是比较运算符)

4.8 C Hello Y

4.9 用到多线程的相关知识,留待以后解决

4.10 考察Math里的abs、floor、ceil、round方法
运行结果:
a=7
b=8
c=7
d=8
e=7
f=6
g=7
h=6

4.11 a)和d)

4.12 运行结果:t equals 8

4.13 CD

4.14
改法一:
static int a=9;
public static void show(int a)
改法二:
A t=new A();
t.a+=t.a;
t.show(t.a);

4.15 设计一个Circle类,其属性为圆心点(类型为前面设计的类MyPoint)和半径,并为此类编写以下三个方法:
一是计算圆面积的calArea()方法
二是计算圆周长的calLength()方法
三是boolean inCircle(MyPoint mp)方法,功能是测试作为参数的某个点
是否在当前对象圆内(圆内,包括圆上返回true;在圆外,返回false)。

  1. package cn.yufei.c4;
  2. import cn.yufei.c3.MyPoint;
  3. public class Circle {
  4.    MyPoint mpt = new MyPoint();
  5.    double r;
  6.    public double calArea() {
  7.       return Math.PI * r * r;
  8.    }
  9.    public double calLength() {
  10.       return 2 * Math.PI * r;
  11.    }
  12.    public boolean inCircle(MyPoint mp) {
  13.       if (Math.hypot(mp.getX() - mpt.getX(), mp.getY() - mpt.getY()) <= r) {
  14.          return true;
  15.       }
  16.       return false;
  17.    }
  18.    public static void main(String[] args) {
  19.       Circle c = new Circle();
  20.       c.mpt.setX(4);
  21.       c.mpt.setY(0);
  22.       c.r = 6;
  23.       MyPoint mp = new MyPoint();
  24.       mp.setX(9);
  25.       mp.setY(11);
  26.       boolean b = c.inCircle(mp);
  27.       System.out.println("Centre of the circle :" + c.mpt + " \nradius:" + c.r);
  28.       System.out.println("Area:" + c.calArea() + "\n" + "Length:" + c.calLength());
  29.       if (b) {
  30.          System.out.println(mp + "is in circle.");
  31.       } else {
  32.          System.out.println(mp + "is not in circle.");
  33.       }
  34.    }
  35. }
复制代码


 楼主| solimh 发表于 2011-9-10 15:20:33 | 显示全部楼层
java私塾课后习题集下载:http://u.115.com/file/e65oeb94
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

快速回复 返回顶部 返回列表