solimh 发表于 2011-9-2 15:58:57

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

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

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

public class T1 {
   public static void main(String[] args) {
      Test t1 = new Test();
      System.out.println(t1.toString());
      Test t2 = new Test(5);
      System.out.println(t2.toString());
      Test t3 = new Test(7, 8);
      System.out.println(t3.toString());
   }
}
// 构造方法重载的类
class Test {
   int x, y;
   public Test() {
      this.x = 0;
      this.y = 0;
   }
   public Test(int x) {
      this.x = x;
      this.y = 0;
   }
   public Test(int x, int y) {
      this.x = x;
      this.y = y;
   }
   public String toString() {
      return "(" + x + "," + y + ")";
   }
}

4.2创建Rodent(啮齿动物):Mouse(老鼠),Gerbil(鼹鼠),Hamster(大颊鼠)等的的一个继承分级结构。在基础类中,提供适用于所有Rodent的方法,并在衍生类中覆盖它们,从而根据不同类型的Rodent采取不同的行动。创建一个Rodent数组,在其中填充不同类型的Rodent,然后调用自己的基础类方法,看看会有什么情况发生。
public class T2 {
   public static void main(String[] args) {
      Rodent[] r = new Rodent;
      r = new Rodent();
      r = new Mouse();
      r = new Gerbil();
      r = new Hamster();
      for (Rodent rr : r) {
         rr.test();
      }
   }
}
class Rodent {
   public void test() {
      System.out.println("Rodent里的方法体test");
   }
}
class Mouse extends Rodent {
   public void test() {
      System.out.println("Mouse里的方法体test");
   }
}
class Gerbil extends Rodent {
   public void test() {
      System.out.println("Gerbil里的方法体test");
   }
}
class Hamster extends Rodent {
   public void test() {
      System.out.println("Hamster里的方法体test");
   }
}

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

   public String toString() {
      return "(" + getX() + "," + getY() + "," + z + ")";
   }
}

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)。

package cn.yufei.c4;
import cn.yufei.c3.MyPoint;
public class Circle {
   MyPoint mpt = new MyPoint();
   double r;
   public double calArea() {
      return Math.PI * r * r;
   }
   public double calLength() {
      return 2 * Math.PI * r;
   }
   public boolean inCircle(MyPoint mp) {
      if (Math.hypot(mp.getX() - mpt.getX(), mp.getY() - mpt.getY()) <= r) {
         return true;
      }
      return false;
   }
   public static void main(String[] args) {
      Circle c = new Circle();
      c.mpt.setX(4);
      c.mpt.setY(0);
      c.r = 6;
      MyPoint mp = new MyPoint();
      mp.setX(9);
      mp.setY(11);
      boolean b = c.inCircle(mp);
      System.out.println("Centre of the circle :" + c.mpt + " \nradius:" + c.r);
      System.out.println("Area:" + c.calArea() + "\n" + "Length:" + c.calLength());
      if (b) {
         System.out.println(mp + "is in circle.");
      } else {
         System.out.println(mp + "is not in circle.");
      }
   }
}

solimh 发表于 2011-9-10 15:20:33

java私塾课后习题集下载:http://u.115.com/file/e65oeb94
页: [1]
查看完整版本: java私塾跟我学-java篇 第4章课后答案