プログラミング演習3 継承(Inheritance)の復習と演習 目次 • 継承 – 継承とは – 実装例 • インターフェイス – 多重継承とは – 実装例 • 演習 • Exercise1 継承(Inheritance)とは いくつかのオブジェクトは共通した性質や特徴を持っ ている。その共通部分をスーパークラスとして定義し、 そのクラスを継承したサブクラスの中でそれぞれ異な る部分を定義する。 スーパークラス ? サブクラス 継承 サブクラス 継承の例 スーパークラス 自動車 速度 乗車人数 アクセル / ブレーキ サブクラス パトカー バス 速度 赤色警光灯 乗車人数 = 5 アクセル / ブレーキ 速度 2 つの自動扉 乗車人数 = 15 アクセル / ブレーキ 乗用車 速度 乗車人数 = 5 アクセル / ブレーキ 継承の例 スーパークラス 自動車 速度 乗車人数 アクセル / ブレーキ サブクラス パトカー extends 自動車 バス extends 自動車 速度 赤色警光灯 乗車人数 = 5 アクセル / ブレーキ 速度 2 つの自動扉 乗車人数 = 15 アクセル / ブレーキ 乗用車 extends 自動車 速度 乗車人数 = 5 アクセル / ブレーキ 継承の実装 - JAVA スーパークラス サブクラス 多重継承とインターフェイス 多重継承とは2つ以上のクラスを継承することを指し、 JAVAではインターフェイスの実装によって実現する。 インターフェイス クラス : 充電出来るもの クラス : 自動車 インターフェイス クラス : 給油出来るもの ? ? 実装 継承 継承 クラス : 電気自動車 ? 継承 実装 継承 クラス : ガソリン自動車 給油 インターフェイスの例 基本的には メソッドのみ インターフェイス 給油出来るもの ガソリンスタンド 給油(給油出来るもの) ・・・ 給油(量) 実装クラス 自動車 給油(量) ガソリン量 4輪 自動二輪車 給油(量) ガソリン量 2輪 オーバーライド ストーブ 給油(量) 灯油量 発熱する インターフェイスの実装 インターフェイス 実装クラス public class Tire { } 演習 : インターフェイスを使ってみよう 「10人の客(乗用車、バイク、ストーブのいずれかラン ダムに決定)に1~100(L)の給油をするガソリンスタンド をシミュレートする実行クラス : RefuelSimulation」を作 成する。給油の際には、どの種類の客が何リットル給 油したか出力すること。 実行結果例 演習 : インターフェイスを使ってみよう ヒント メンバーのインスタンス化 給油を行なう 演習 : 図形クラスを定義してみよう それぞれの図形のサイズが一定であるとき、共通する メンバやメソッドをスーパークラスに書き出す。ただし、 いずれのクラスも「面積を返すメソッド : area(引数)」 を 持つこと。 BigSquare BigRectangle BigIsoscelesTriangle BigCircle 40 * 40 (pixel) 60 * 20 (pixel) 40 * 25 (pixel) 40 * 40 (pixel) SmallIsoscelesTriangle SmallCircle 25 * 15 (pixel) 15 * 15 (pixel) SmallSquare SmallRectangle 10 * 10 (pixel) 30 * 10 (pixel) 演習 : 図形クラスを定義してみよう ? Polygon Rectangle Square Shape ? ? ? IsoscelesTriangle ? ? Circle SmallRectangle BigRectangle SmallSquare BigSquare SmallCircle SmallIsoscelesTriangle BigCircle BigIsoscelesTriangle 演習 : Drawableインターフェイスを 定義してみよう インターフェイス Drawable を定義し、それぞれの図形 クラスに以下のメソッドを持たせる。 「座標(x, y)を中心に形を描画するメソッド : draw(int x, int y)」 「座標(x, y)を中心に形を描画し、塗りつぶすメソッド : drawfill(int x, int y)」 「図形の色を設定するメソッド : setColor(Color c)」 「図形の色を返すメソッド : getColor()」 ただし、「draw(int x, int y)」を実行すると“〇〇(クラス名)を(x, y)に描画”、 「drawfill(int x, int y)」を実行すると“〇〇(クラス名)を(x, y)に塗りつぶして描 画”という文字列がコンソールに出力されること。 draw(int x, int y) drawfill(int x, int y) setColor(Color c) getColor() 追加 Exercise1 1. 複数の図形をメンバとして持ち、それらを順に描画することで 複雑な図形が全体の描画を実現するために、「インターフェイ ス : CompoundDrawable」を定義する。CompoundDrawble は Drawableの持つメソッドに加え、「メンバである全ての図形オブ ジェクトを返すメソッド : getParts()」を持つ。 2. CompoundDrawableを利用して、図1のような図形を描画する Treeクラスを定義する。(描画処理は実装しないため、座標や サイズが正確である必要はない。) BigIsoscelesTriangle 図1. 木 SmallSquare SmallIsoscelesTriangle BigIsoscelesTriangle Exercise1 3. 「描画の実行クラス : DrawTest」を作成し、Treeクラスの描画を テストする。ただし、「draw(int x, int y)」を実行すると“〇〇(クラス名)を(x, y)に描画” という文字列がコンソールに出力されること。 実行結果例
© Copyright 2024 ExpyDoc