「Javaプログラミング思想」第8章練習問題


ソースの住所:https://github.com/yangxian1229/ThinkingInJava 練習1:Cycleクラスを作成します。サブクラスのUnicycle、Bicycle、Tricycleを持っています。デモの各タイプの例は、ride()アプローチを介してCycleに変換され得る。練習2:幾何学図形の例に@Override注解を追加します。練習3:略練習4:略練習5:練習1をもとに、Cycleにwheels()を追加する方法で、車輪の数を返します。ride()方法を修正して、wheels()方法を呼び出させて、多状態を検証して機能しました。練習6:Music 3.javaを修正して、what()の方法をルートObjectのtoString()の方法にします。System.out.println()方法を使ってInstrumentオブジェクトを印刷します。練習7:Music 3.javaに新しいタイプのInstruumentを追加し、追加された新しいタイプに多形性が作用するかどうかを検証する。練習8:Music 3.javaを修正して、Shappes.javaのようにランダムにInstrumentオブジェクトを作成することができます。練習9:Rodent(噛歯動物)を作成する:Mouse(ネズミ)、Gerbil(土竜)、Hamster(ハムスター)などの階層構造を継承します。基本クラスでは、すべてのRodentに共通の方法が提供され、導出クラスでは、特定のRodentタイプに従ってこれらの方法がカバーされ、彼らは異なる挙動を実行する。Robent配列を作成し、異なるRodentタイプを充填し、ベースメソッドを呼び出して、どのような状況が発生するかを観察します。練習10:2つの方法を含む基本クラスを作成します。第一の方法では、第二の方法を呼び出すことができる。次に、ベースクラスからの導出クラスを継承し、クラス内の第2の方法をカバーする方法が生成される。この導出クラスのためのオブジェクトを作成し、ベースタイプに変換し、最初の方法を呼び出して、発生した状況を説明します。
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 object in order of definition、then the ders class、starting with its memberg.javaにfinalizeを追加します。練習14:練習12を修正して、あるメンバーオブジェクトが参照カウントを共有するオブジェクトに変更され、正しく動作することができることを証明する。練習15:PloyContror.javaにRectanglarGlyphを追加し、本節で説明した問題が発生することを証明します。練習16:Transmagrify.javaの例に従って、Strshipクラスを作成し、AlertStatus参照を含み、この参照は3つの異なる状態を示すことができる。これらの状態を変えることができるいくつかの方法を取り入れる。練習17:練習1のCycleの階層構造を使って、UnicycleとBicycleにbalance()を追加しますが、Tricycleには追加されません。これらの3つのタイプのすべての例を作成し、それらを上方にCycle配列に変換します。配列の各要素でbalance()の呼び出しを試み,結果を観察した。そしてそれらを下方に転換し、再びbalance()を呼び出し、何が発生したかを観察する。