http://www.xmlpro.org/

Download Report

Transcript http://www.xmlpro.org/

http://www.xmlpro.org/
↑ 講義資料のダウンロードは ↑
ブログの「講義資料」から
第9回 高度な継承
参考書:スッキリわかるJava入門 第2版
目次
• 『継承用クラス』の問題点
• 抽象クラス
• インタフェース
• 演習
目次
• 『継承用クラス』の問題点
• 抽象クラス
• インタフェース
• 演習
継承用クラス
便宜上、勝手に作った言葉
継承元とすることで以降の開発を楽にするために作ったクラス
重複部分
• いくつかのフィールド
• restメソッド
• moveメソッド
実演
問題点①
解決案①
moveメソッドは書かない!子クラスに任せる!
⇒オブジェクト指向的に不自然
解決案②
moveメソッドは空っぽ!子クラスでオーバーライドしてもらう!
⇒オーバーライドしてもらえるかわからない
問題点②
目次
• 『継承用クラス』の問題点
• 抽象クラス
• インタフェース
• 演習
抽象クラス
抽象メソッドと呼ばれる、
現時点で処理内容を確定できないメソッドを持っているクラス
抽象クラスの特徴
• 抽象クラスのインスタンスは作ることができない
• 抽象クラスを継承元とする子クラスは、抽象メソッドをオーバーライド
しない限り、自身のインスタンスを作ることができない
抽象クラス及び抽象メソッドの作り方
抽象クラス
アクセス修飾子 abstract class クラス名{
内容
}
抽象メソッド
アクセス修飾子 abstract 戻り値の型 メソッド名(引数リスト);
実演①
実演①
実演①
実演②
Thiefのインスタンス
Thiefのインスタンス
PlayableCharacterインスタンス
差分フィールド無し
name,hp,・・・
rest( )
move( )(抽象)
差分メソッド無し
オーバーライド無し
実演②
実演②
目次
• 『継承用クラス』の問題点
• 抽象クラス
• インタフェース
• 演習
実演
実演
実演
実演
実演
インタフェース
抽象クラスの中でも特に抽象的なものを特別に扱ったもの
以下の2つの条件を満たしている必要がある
・すべてのメソッドは抽象メソッドである
・定数以外のフィールドを持たない
インタフェース
「クラス」と似てはいるものの、
あくまで「インタフェース」という独立した仕組みであり、
特別に多重継承が許されている
多重継承
多重継承
多重継承
親A
親B
hello( )
hello( )
子C
インタフェースの作り方
アクセス修飾子 interface インタフェース名{
//定数
public static final 型 定数名 = データ;
型 定数名 = データ;
//抽象メソッド
public abstract 戻り値の型 抽象メソッド名(引数リスト);
戻り値の型 抽象メソッド名(引数リスト);
}
インタフェースの使い方
アクセス修飾子 class クラス名 implements 親インタフェース名{
オーバーライドを忘れない
}
アクセス修飾子 class クラス名 implements 親インタフェース名1,
親インタフェース名2,・・・{
オーバーライドを忘れない
}
extendsとの併用
アクセス修飾子 class クラス名 extends 親クラス名
implements 親インタフェース名1, 親インタフェース名2, ・・・{
}
インタフェースの継承
アクセス修飾子 interface 子インタフェース extends 親インタフェース{
差分
}
実演
実演
目次
• 『継承用クラス』の問題点
• 抽象クラス
• インタフェース
• 演習
演習①
インタフェースを2つ、抽象クラスを1つ作成し、
それらを元にしたクラスを1つ作成せよ。