http://www.xmlpro.org/

Download Report

Transcript http://www.xmlpro.org/

http://www.xmlpro.org/
↑ 講義資料のダウンロードは ↑
ブログの「講義資料」から
第8回 継承
参考書:スッキリわかるJava入門 第2版
目次
• 継承の基礎
• インスタンスの姿
• 継承とコンストラクタ
• 継承のルール
• final
• 演習
目次
• 継承の基礎
• インスタンスの姿
• 継承とコンストラクタ
• 継承のルール
• final
• 演習
実演
実演
実演
実演
実演
「剣士」と「重剣士」の違い
• usingShield
• moveメソッドの処理
• switchShieldメソッド
継承
元となるクラスを1つだけ選び、
それとの差分だけを記述して新たなクラスを定義する機能
継承のやり方
アクセス修飾子 class クラス名 extends 元となるクラス名{
元となるクラスとの「差分」メンバ
}
「剣士」と「重剣士」の違い
• usingShield ←差分(新たなフィールド)
• moveメソッドの処理 ←差分?
• switchShieldメソッド ←差分(新たなメソッド)
オーバーライド
親クラスのメンバを子クラス側で上書きすること
実演
実演
再掲
再掲
名前
対応する修飾子
private
private
package private (何も書かない)
アクセス可能範囲
自分自身のクラスのみ
自分と同じパッケージに属するクラス
protected
protected
自分と同じパッケージに属するか、
自分を継承した子クラス
public
public
すべてのクラス
実演
実演
目次
• 継承の基礎
• インスタンスの姿
• 継承とコンストラクタ
• 継承のルール
• final
• 演習
今までのインスタンス
インスタンス
フィールド
メソッド
子クラスのインスタンス
子クラスのインスタンス
親クラスのインスタンス
子クラスのフィールド
親クラスのフィールド
親クラスのメソッド
子クラスのメソッド
HeavySwordsmanのインスタンス
HeavySwordsmanのインスタンス
Swordsmanのインスタンス
usingShield
name,hp,・・・
rest( )
move( )
move( )
switchShield( )
メソッドの呼び出し
多重構造になっているインスタンスは、
極力、外側にある子インスタンス部分のメソッドで対応しようとする
親インスタンス部へのアクセス
親インスタンス部に属するメンバにアクセスすることが可能
super.フィールド名
super.メソッド名(引数リスト)
実演
祖父母インスタンス部へのアクセス
祖父母インスタンス部へはアクセスできない
祖父母
不可能
親
可能
子
Aクラスのインスタンス
Aクラスのインスタンス
Aクラスのフィールド
Aクラスのメソッド
Aを継承したBのインスタンス
Bクラスのインスタンス
Aクラスのインスタンス
Bクラスのフィールド
Aクラスのフィールド
Aクラスのメソッド
Bクラスのメソッド
Aを継承したBを継承したCのインスタンス
Cクラスのインスタンス
Bインスタンス
Cクラスのフィールド
Aインスタンス
Aフィールド
Aメソッド
Bフィールド
Bメソッド
Cクラスのメソッド
目次
• 継承の基礎
• インスタンスの姿
• 継承とコンストラクタ
• 継承のルール
• final
• 演習
子インスタンスの作成手順①
親クラスのインスタンス
親クラスのフィールド
親クラスのメソッド
子インスタンスの作成手順②
子クラスのインスタンス
親クラスのインスタンス
子クラスのフィールド
親クラスのフィールド
親クラスのメソッド
子クラスのメソッド
実演
実演
実演
実演
実演
子クラスのコンストラクタ
すべてのコンストラクタは、
その先頭で必ず親クラスのコンストラクタを呼び出さなければならない。
super(引数リスト);
※コンストラクタの最初の行にしか記述できない
呼び出していない場合、Javaが自動的に
引数無しの親クラスのコンストラクタを呼び出そうとする。
実演
実演
実演
目次
• 継承の基礎
• インスタンスの姿
• 継承とコンストラクタ
• 継承のルール
• final
• 演習
is-aの原則
子クラス is a 親クラス
子クラスは親クラスの一種である
と言えるように継承を行うべきである
汎化・特化の関係
is-aの原則に則って継承を行えば、
子クラスになるほど「特殊で具体的なもの」に具体化(特化)していき、
親クラスになるほど「一般的で抽象的なもの」に一般化(汎化)していく
目次
• 継承の基礎
• インスタンスの姿
• 継承とコンストラクタ
• 継承のルール
• final
• 演習
final
修飾子の一つ
①変数につけると、その変数は書き換えることができなくなる
②メソッドにつけると、そのメソッドはオーバーライドできなくなる
③クラスにつけると、そのクラスは継承できなくなる
実演①
実演②
実演②
実演③
実演③
目次
• 継承の基礎
• インスタンスの姿
• 継承とコンストラクタ
• 継承のルール
• final
• 演習
演習
前々回と前回で使用したMageクラスを継承するGreatMageクラスを作
成せよ。その際、Mageクラスに変更を加えてもよい。