pi-6. 継承,クラス階層

142 Views

January 26, 22

スライド概要

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-6. 継承,クラス階層 (Java の基本) URL: https://www.kkaneko.jp/cc/pi/index.html 金子邦彦 1

2.

• 2つの似たような「クラス」が必要になるとき、 なるべく、ミスを減らしたい → 継承、クラスの抽象化 が有効 今回と次回の授業で説明 2

3.

アウトライン 番号 項目 説明時間の 目安 6-1 オブジェクトとクラス 8分 6-2 スーパークラス、サブクラス 4分 6-3 継承 20分 6-4 クラス階層 6分 各自、資料を読み返したり、課題に取り組んだりも行う この授業では、Java を用いて基礎を学び、マスターする 3

4.

全体まとめ • クラス階層とは,複数のクラスがスーパークラス, サブクラスの関係をなすこと • スーパークラスの属性とメソッドは,すべてサブ クラスが受け継ぐ(「継承」という) サブクラスは,スーパークラスの属性とメソッドを すべて持つ • サブクラスで,スーパークラスにない属性やメ ソッドが追加されることがある • スーパークラス,サブクラスの関係の指定は, Java では,「class Circle extends Ball」のよう に書く.Circle がサブクラス,Ball がスーパーク ラス. 4

5.

6-1.オブジェクトとクラス 5

6.

半径 1,場所(8, 10) 色 blue 円(Circle) 半径 3,場所(2, 4) 色 green 円(Circle) 6

7.

Java のオブジェクトの生成 次の2つのオブジェクトを生成する Java プログラム x 2 x 4 y 3 "green" r color y 8 x 10 1 "blue" y r color • このとき,次のクラスを使うことにする クラス名 Circle 属性 x, y, r, color コンストラクタ 7

8.

クラス定義,コンストラクタ • Java のクラス定義では,クラス名,属性名と各属 性のデータ型を指定する.メソッド定義も行う. • コンストラクタとは,オブジェクトの生成を行う メソッドのことである. 8

9.

Java Tutor Java などのプログラミング言語の体験, 演習ができるオンラインサービス ① ウェブブラウザで次の URL を開く http://www.pythontutor.com/ 9

10.

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

11.

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

12.

② 「Java Tutor」をクリック 12

13.

① Java Tutor で,次のソースコードを入れる クラス定義 コンストラクタによるオブジェクト生成 13

14.

② 実行.実行結果を確認 「Visualize Execution」をクリック, 「Last」をクリック. (あとで使うので、プログラムを消さないこと) 2つのオブジェクト x, y が生成される 14

15.

6-2.スーパークラス,サブク ラス 15

16.

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

17.

スーパークラス,サブクラス • スーパークラス「人間」 • サブクラス「学生」 「学生」のオブジェクトは,すべて「人間」である (あるサブクラスに属するオブジェクトは、その スーパークラスにも属する) 人間 学生 学生でもあり人間でもある 人間だが、学生ではない 17

18.

6-3.継承 18

19.

継承 • 継承とは,スーパークラスの属性とメソッドをサブ クラスが受け継ぐこと • 但し,コンストラクタは受け継がない • オブジェクト指向のプログラミング言語には,継承 の機能がある 19

20.

スーパークラス,サブクラス • スーパークラス「図形 (Figure)」 • サブクラス「円 (Circle)」 「円 (Circle)」のオブジェクトは,すべて「図形 (Figure)」である 図形 (Figure) 円 (Circle) x y 図形でもあり円でもある 20

21.

継承の例 • 継承とは,スーパークラスの属性とメソッドをサブ クラスが受け継ぐこと • 但し,コンストラクタは受け継がない 次のように考える • 図形 (Figure) の属性 承される → すべて,円 (Circle) に継 x, y, color • 円 (Circle) にしかない属性 r ⇒ 円の属性は x, y, color, r 21

22.

クラスの類似性 Figure 属性 Circle 属性 x x y y color color スーパークラス r 追加 サブクラス 22

23.

クラス Figure の定義 class Figure { double x; double y; String color; public Figure(double x, double y, String color) { this.x = x; this.y = y; this.color = color; } } クラス名 Figure 属性 x, y, color 23

24.

クラス Circle の定義 class Circle extends Figure { double r; public Circle(double x, double y, String color, double r) { super(x, y, color); this.r = r; } } あるクラスが別のクラスのサブクラスであるとき ① 「extends Figure」のように、スーパークラス名を指定 ② コンストラクタ内では「this.r = r」(Circle にしかない 属性を初期化) ③ スーパークラスで定義されている属性 x, y, color の初期 化は「super(x, y, color)」 24

25.

スーパークラス、サブクラスのためのキーワード キーワード extends スーパークラスの指定 super スーパークラスのコンストラクタの 呼び出し 25

26.

① Java Tutor で,次のソースコードを入れる クラス定義 クラス定義 コンストラクタによるオブジェクト生成 26

27.

② 実行.実行結果を確認 「Visualize Execution」をクリック, 「Last」をクリック. (あとで使うので、プログラムを消さないこと) 2つのオブジェクト x, y が生成される (前のプログラムと 同じ) 27

28.

③ Java Tutor で,次のソースコードを入れる 28

29.

④ 実行.実行結果を確認 「Visualize Execution」をクリック, 「Last」をクリック. (あとで使うので、プログラムを消さないこと) メソッド move が継承されている 29

30.

スーパークラス,サブクラス • サブクラスは,スーパークラスの属性とメソッドをす べて持つ • サブクラスで,スーパークラスにない属性やメソッド が追加されることがある スーパークラス クラス Figure サブクラス クラス Circle 属性 r を追加 30

31.

まとめ • クラス階層とは,複数のクラスがスーパークラス, サブクラスの関係をなすこと • スーパークラスの属性とメソッドは,すべてサブ クラスが受け継ぐ(「継承」という) サブクラスは,スーパークラスの属性とメソッドを すべて持つ • 但し,コンストラクタは受け継がない • サブクラスで,スーパークラスにない属性やメ ソッドが追加されることがある • スーパークラス,サブクラスの関係の指定は, 「class Circle extends Ball」のように書く. Circle が子,Ball が親. 31

32.

6-4.クラス階層 32

33.

クラス階層 クラス階層とは,複数のクラスがスーパークラ ス,サブクラスの関係をなすこと クラスA 親 子 クラスB 親 子 クラスC 親 子 クラスD 33

34.

① Java Tutor で,次のソースコードを入れる 34

35.

② 実行.実行結果を確認 「Visualize Execution」をクリック, 「Last」をクリック. 2つのオブジェクト x, a が生成される 35

36.

クラス階層は何のため? ① • Java の標準機能のクラスを拡張するため クラスA 親 Java の 標準機能 子 クラスB 親 子 クラスC 親 子 自分で 機能拡張 クラスD 36

37.

クラス階層は何のため? ② • 似通ったクラスを使いたいとき、プログラムのミ スを減らすため クラスA 親 子 クラスB 親 子 クラスC クラス B, クラス C が似ているとき、共通する 機能を、スーパークラス A にまとめる 37

38.
[beta]
ソースコード (6-1)
class Circle {
double x;

double y;
double r;
String color;
public Circle(double x, double y, double r, String color) {
this.x = x;
this.y = y;
this.r = r;

this.color = color;
}
}

public class YourClassNameHere {
public static void main(String[] args) {
Circle x = new Circle(2, 4, 3, "green");

Circle y = new Circle(8, 10, 1, "blue");
}
}

38

39.
[beta]
ソースコード 6-3
class Figure {
double x;
double y;
String color;
public Figure(double x, double y, String color) {
this.x = x;
this.y = y;
this.color = color;
}
}
class Circle extends Figure {
double r;
public Circle(double x, double y, double r, String color) {
super(x, y, color);
this.r = r;
}
}
public class YourClassNameHere {
public static void main(String[] args) {
Circle x = new Circle(2, 4, 3, "green");
Circle y = new Circle(8, 10, 1, "blue");
}
}

39

40.
[beta]
ソースコード
6-4
class Figure {
double x;
double y;
String color;
public Figure(double x, double y, String color) {
this.x = x;
this.y = y;
this.color = color;
}
public void move(double xx, double yy) {
this.x = this.x + xx;
this.y = this.y + yy;
}
}
class Circle extends Figure {
double r;
public Circle(double x, double y, double r, String color) {
super(x, y, color);
this.r = r;
}
}

public class YourClassNameHere {
public static void main(String[] args) {
Circle x = new Circle(2, 4, 3, "green");
Figure a = new Figure(5, 5, "blue");
x.move(1, 1);
a.move(10, 10);
}
}

40