pi-9. スーパークラス,サブクラス,継承

>100 Views

December 19, 22

スライド概要

トピックス:スーパークラス,サブクラス,extends,super,継承

Java の基本
URL: https://www.kkaneko.jp/cc/pi/index.html

profile-image

金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

pi-9. スーパークラス, サブクラス,継承 トピックス:スーパークラス,サブクラス, extends,super,継承 URL: https://www.kkaneko.jp/cc/pi/index.html (Java の基本) 金子邦彦 1

2.

全体まとめ • サブクラスのオブジェクトは,すべてスーパーク ラスに属する • 継承:スーパークラスの属性とメソッドをサブク ラスが受け継ぐ 但し,コンストラクタは受け継がない • コンストラクタ以外のメソッドは,オーバーライ ドできる • サブクラスで,スーパークラスにない属性やメ ソッドを追加できる 2

3.

アウトライン 番号 項目 復習 9-1 スーパークラス,サブクラス 9-2 スーパークラス,サブクラスの Java プログラム, 継承 9-3 メソッドのオーバーライド 9-4 サブクラスでの属性の追加 各自、資料を読み返したり、課題に取り組んだりも行う この授業では、Java を用いて基礎を学び、マスターする 3

4.

クラスとオブジェクト クラスは,同じ種類のオブジェクトの集まりと考え ることができる 人間 学生 学生でもあり人間でもある 人間だが,学生ではない 4

5.

Java のクラス クラス Ball オブジェクト 半径 1,場所(8, 10) 色 blue オブジェクト クラス定義のプログラム Ball a = new Ball(8, 10, 1, "blue"); Ball b = new Ball(2, 4, 3, "green"); オブジェクト生成のプログラム a.printout(); b.printout(); 半径 3,場所(2, 4) 色 green メソッドアクセスのプログラム 5

6.

クラス定義のプログラム クラス名: Ball 4つの属性 メソッド: Ball メソッド: printout このクラス定義を使用した,オブジェクトの生成 a 8 10 1 "red" b 2 x 4 y 3 r "green" color Ball a = new Ball(8, 10, 1, "blue"); Ball b = new Ball(2, 4, 3, "green"); Javaプログラム 6

7.

メソッドアクセス a.printout(); b.printout(); Javaプログラム aやb オブジェクト printout() メソッド 間を「.」で区切っている 7

8.

Java Tutor の起動 ① ウェブブラウザを起動する ② Java Tutor を使いたいので,次の URL を開く http://www.pythontutor.com/ ③ 「Java」をクリック ⇒ 編集画面が開く 8

9.

Java Tutor でのプログラム実行手順 (1)「Visualize Execution」をク リックして実行画面に切り替える (2)「Last」をクリック. (4)「Edit this code」をク (3) 実行結果を確認する. リックして編集画面に戻る 9

10.

Java Tutor 使用上の注意点① • 実行画面で,次のような赤の表示が出ることがある → 無視してよい 過去の文法ミスに関する確認表示 邪魔なときは「Close」 10

11.

Java Tutor 使用上の注意点② 「please wait ... executing」のとき,10秒ほど待つ. → 混雑しているときは, 「Server Busy・・・」 というメッセージが出ることがある. 混雑している.少し(数秒から数十秒)待つと自 動で表示が変わる(変わらない場合には,操作を もう一度行ってみる) 11

12.

9-1. スーパークラス,サブク ラス 12

13.

スーパークラスとサブクラス 正方形は,長方形である (正方形ではない長方形もある) 長方形: 正方形: スーパークラス サブクラス 13

14.

長方形と正方形 幅 2,高さ 1, 場所(8, 10) 幅 1,高さ 2, 場所(4, 8) 幅 1,高さ 1, 場所(0, 3) 幅 2,高さ 2, 場所(1, 1) 幅 3,高さ 1, 場所(7, 5) 14

15.

長方形と正方形 長方形であり, 正方形でもある 幅 2,高さ 1, 場所(8, 10) 幅 1,高さ 2, 場所(4, 8) 幅 1,高さ 1, 場所(0, 3) 幅 2,高さ 2, 場所(1, 1) 幅 3,高さ 1, 場所(7, 5) 長方形であるが, 正方形ではない 15

16.

スーパークラスとサブクラス 「長方形」の クラス 「正方形」の クラス 幅 2,高さ 1, 場所(8, 10) 幅 1,高さ 2, 場所(4, 8) 幅 1,高さ 1, 場所(0, 3) 幅 3,高さ 1, 「正方形」ではない 場所(7, 5) 長方形もある 幅 2,高さ 2, 場所(1, 1) 「正方形」はすべて長方形 である 16

17.

スーパークラス,サブクラス サブクラスのオブジェクトは,すべてスーパー クラスに属する クラス X (スーパークラス) クラス Y (サブクラス) 17

18.

スーパークラス,サブクラスの例 例① くだもの りんご スーパークラス サブクラス 例② 住民 世帯主 スーパークラス サブクラス 例③ 図形 円 スーパークラス サブクラス 18

19.

9-2. スーパークラス,サブク ラスの Java プログラム,継 承 19

20.

Java でのクラス定義 • class Y extends X : クラス Y のスーパークラス はX であることを指定 • super : スーパークラスのコンストラクタの呼び 出し class X { ・・・ public X(・・・) { ・・・ } ・・・ } クラス定義 class Y extends X { ・・・ public Y(・・・) { super(・・・) ・・・ } ・・・ } クラス定義 Y のスーパークラスが X である場合 20

21.

「長方形」のクラス定義の例 クラス名: Rectangle 4つの属性 メソッド: Rectangle メソッド: printout このクラス定義を使用した,オブジェクトの生成 a 4 8 1 2 b 8 x 10 2 1 y width height Rectangle a = new Rectangle(4, 8, 1, 2); Rectangle b = new Rectangle(8, 10, 2, 1); Javaプログラム 21

22.

継承 • 継承:スーパークラスの属性とメソッドをサブク ラスが受け継ぐ • 但し,コンストラクタは受け継がない (コンストラクタは必ず定義する必要がある) 長方形 (Rectangle) 属性とメソッド 正方形 (Square) 継承 属性 とメソッド x x y y width width height height printout printout スーパークラス サブクラス 22

23.

「正方形」のクラス定義の例 クラス名: Square スーパークラス: Rectangle メソッド: Square このクラス定義を使用した,オブジェクトの生成 c 0 3 1 1 d 1 x 1 y 2 2 width height Square c = new Square(0, 3, 1); Square d = new Square(1, 1, 2); Javaプログラム 23

24.

キーワード extends super スーパークラスの指定 スーパークラスのコンストラクタの 呼び出し 24

25.

演習 資料:26 ~ 28 【トピックス】 • スーパークラス • サブクラス • extends • super 25

26.

① Java Tutor のエディタで次のプログラムを入れる 26

27.

② 引き続き,次のプログラムを入れる 27

28.

③ 実行し,結果を確認する (あとで使うので、プログラムを消さないこと) 4つのオブジェクト a, b, c, d が生成される 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 28

29.

9-3. メソッドのオーバーライ ド 29

30.

メソッドのオーバーライド • コンストラクタ以外のメソッドは,受け継がずに オーバーライドできる オーバーライドは,別の定義を行うこと 長方形 (Rectangle) 属性とメソッド 正方形 (Square) 継承 属性 とメソッド x x y y width width height height printout printout ← オーバーライド スーパークラス サブクラス 30

31.

「正方形」のクラス定義の例 クラス名: Square スーパークラス: Rectangle メソッド: Square メソッド: printout • メソッド printout のオーバーライド • スーパークラスのメソッド printout とは別の定義 を行う。 31

32.

演習 資料:33 ~ 34 【トピックス】 • メソッドのオーバーライド 32

33.

① Java Tutor のエディタで次のプログラムを加える 33

34.

② 実行し,結果を確認する (あとで使うので、プログラムを消さないこと) 表示が変わる 4つのオブジェクト a, b, c, d が生成される 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 34

35.

9-4. サブクラスでの属性の追 加 35

36.

サブクラスでの属性,メソッドの追加 • サブクラスで,スーパークラスにない属性やメ ソッドを追加できる 長方形 (Rectangle) 属性とメソッド 色付きの長方形 (ColorRectangle) 継承 属性 とメソッド x x y y width width height height printout printout スーパークラス color サブクラスで追加された属性 サブクラス 36

37.

「色付きの長方形」のクラス定義の例 クラス名: ColorRectangle スーパークラス: Rectangle メソッド: Square メソッド: printout • サブクラスで,属性 color を追加 37

38.

演習 資料:39 ~ 41 【トピックス】 • サブクラスでの属性の追加 38

39.

① Java Tutor のエディタで次のプログラムを加える 39

40.

② 引き続き,次のプログラムを加える 40

41.

③ 実行し,結果を確認する 5つのオブジェクト a, b, c, d, e が生成される 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 41

42.

全体まとめ • サブクラスのオブジェクトは,すべてスーパーク ラスに属する • 継承:スーパークラスの属性とメソッドをサブク ラスが受け継ぐ 但し,コンストラクタは受け継がない • コンストラクタ以外のメソッドは,オーバーライ ドできる • サブクラスで,スーパークラスにない属性やメ ソッドを追加できる 42

43.

ソースコード (9-2) class Rectangle { double x; double y; double width; double height; public Rectangle(double x, double y, double width, double height) { this.x = x; this.y = y; this.width = width; this.height = height; } public void printout() { System.out.println(this.x); System.out.println(this.y); System.out.println(this.width); System.out.println(this.height); } } class Square extends Rectangle { public Square(double x, double y, double size) { super(x, y, size, size); } } public class YourClassNameHere { public static void main(String[] args) { Rectangle a = new Rectangle(4, 8, 1, 2); Rectangle b = new Rectangle(8, 10, 2, 1); a.printout(); b.printout(); Square c = new Square(0, 3, 1); Square d = new Square(1, 1, 2); c.printout(); d.printout(); } } 43

44.

ソースコード (9-3) class Rectangle { double x; double y; double width; double height; public Rectangle(double x, double y, double width, double height) { this.x = x; this.y = y; this.width = width; this.height = height; } public void printout() { System.out.println(this.x); System.out.println(this.y); System.out.println(this.width); System.out.println(this.height); } } class Square extends Rectangle { public Square(double x, double y, double size) { super(x, y, size, size); } public void printout() { System.out.println(this.x); System.out.println(this.y); System.out.println(this.width); } } public class YourClassNameHere { public static void main(String[] args) { Rectangle a = new Rectangle(4, 8, 1, 2); Rectangle b = new Rectangle(8, 10, 2, 1); a.printout(); b.printout(); Square c = new Square(0, 3, 1); Square d = new Square(1, 1, 2); c.printout(); d.printout(); } } 44

45.
[beta]
ソースコード (9-4)
class Rectangle {
double x;
double y ;
double width;
double height;
public Rectangle(double x, double y , double width, double height) {
this.x = x;
this.y = y ;
this.width = width;
this.height = height;
}
public v oid printout() {
Sy stem.out.println(this.x);
Sy stem.out.println(this.y);
Sy stem.out.println(this.width);
Sy stem.out.println(this.height);
}
}
class Square extends Rectangle {
public Square(double x, double y , double size) {
super(x, y , size, size);
}
public v oid printout() {
Sy stem.out.println(this.x);
Sy stem.out.println(this.y);
Sy stem.out.println(this.width);
}
}
class ColorRectangle extends Rectangle {
String color;
public ColorRectangle(double x, double y , double width, double height, String color) {
super(x, y , width, height);
this.color = color;
}
public v oid printout() {
Sy stem.out.println(this.x);
Sy stem.out.println(this.y);
Sy stem.out.println(this.width);
Sy stem.out.println(this.height);
Sy stem.out.println(this.color);
}
}
public class Y ourClassNameHere {
public static v oid main(String[] args) {
Rectangle a = new Rectangle(4, 8, 1, 2);
Rectangle b = new Rectangle(8, 10, 2, 1);
a.printout();
b.printout();
Square c = new Square(0, 3, 1);
Square d = new Square(1, 1, 2);
c.printout();
d.printout();
ColorRectangle e = new ColorRectangle(0, 0, 1, 4, "Red");
e.printout();
}
}

45

46.

関連ページ • Java プログラミング入門 GDB online を使用 https://www.kkaneko.jp/cc/ji/index.html • Java の基本 Java Tutor, GDB online を使用 https://www.kkaneko.jp/cc/pi/index.html • Java プログラム例 https://www.kkaneko.jp/pro/java/index.html 46