《Java编程思想》第8章 练习题

源码地址:https://github.com/yangxian1229/ThinkingInJava
练习1:创建一个Cycle类,它具有子类UnicycleBicycleTricycle。演示每一个类型的实例都可以经由ride()方法向上转型为Cycle
练习2:在几何图形的示例中添加@Override注解。
练习3:略。
练习4:略。
练习5:以练习1为基础,在Cycle中添加wheels()方法,它将返回轮子数量。修改ride()方法,让它调用wheels()方法,并验证多态起作用了。
练习6:修改Music3.java,使what()方法成为根Object的toString()方法。试用System.out.println()方法打印Instrument对象(不用向上转型)。
练习7:向Music3.java添加一个新的类型Instrument,并验证多态性是否作用于所添加的新类型。
练习8:修改Music3.java,使其可以像Shapes.java中的方式那样随机创建Instrument对象。
练习9:创建Rodent(啮齿动物):Mouse(老鼠),Gerbil(鼹鼠),Hamster(仓鼠),等等这样一个的继承层次结构。在基类中,提供对所有的Rodent都通用的方法,在导出类中,根据特定的Rodent类型覆盖这些方法,以便他们执行不同的行为。创建一个Robent数组,填充不同的Rodent类型,然后调用基类方法,观察发生什么情况。
练习10:创建一个包含两个方法的基类。在第一个方法中可以调用第二个方法。然后产生一个继承自该基类的导出类,且覆盖类中的第二个方法。为该导出类创建一个对象,将它向上转型到基类型并调用第一个方法,解释发生的情况。

package ch8;

import static net.mindview.util.Print.*;

class E10A{
	public void a(){print("E10A.a():"+b());}
	public String b(){return "E10A.b()";}
}

class E10B extends E10A{
	public String b(){return "E10B.b()";}
}

public class E10 {
	public static void main(String[] args) {
		E10B eb = new E10B();
		eb.a();
		
	}
}/* Output:
E10A.a():E10B.b()
*///:~

练习11:略。
练习12:修改练习9,使其能够演示基类和导出类的初始化顺序。然后向基类和导出类中添加成员对象,并说明构建期间初始化发生的顺序。
We initialize the base class first, starting with the member objects in order of definition, then the derived class, starting with its member objects.
练习13:在ReferenceCounting.java中添加一个finalize()方法,用来校验终止条件(查看第五章)。
练习14:修改练习12,使得其某个成员对象变为具有引用计数的共享对象,并证明他可以正确运行。
练习15:在PloyConstructor.java中添加一个RectangularGlyph,并证明会出现本节所描述的问题。
练习16:遵循Transmogrify.java这个例子,创建一个Starship类,包含一个AlertStatus引用,此引用可以指示三种不同的状态。纳入一些可以改变这些状态的方法。
练习17:使用练习1中的Cycle的层次结构,在UnicycleBicycle中添加balance()方法,而Tricycle中不添加。创建所有这三种类型的实例,并将它们向上转型为Cycle数组。在该数组的每一个元素上都尝试调用balance(),并观察结果。然后将它们向下转型,再次调用balance(),并观察所产生什么。

猜你喜欢

转载自blog.csdn.net/lanzijingshizi/article/details/84201029