1. 程式人生 > >《Java程式設計思想》第8章 練習題

《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(),並觀察所產生什麼。