高度な継承
abstractの考え方
例えば「人間」というクラス(食べる、歩く、寝る)から、「スポーツマン」・「読書家」というクラスを作る時、「スポーツマン」・「読書家」クラス毎に、継承元である人間クラスの(食べる、寝る)の量がそれぞれ違う。(スポーツマンは読書家よりたくさん食べ、読書家は夜更かしして、疲れてよく寝るスポーツマンより寝る量が少ないという事にして下さい 笑)
この場合、人間クラスでは(食べる、寝る)について詳細を定義出来ない。
しかし、人間は「スポーツマン」「読書家」に関わらず、必ず(食べる、歩く、寝る)という行為をする。
オブジェクト指向で考えれば、人間クラスで行う事は人間クラスに必ず記載しなければならない。
そのための機能。
曖昧なメソッドを定義する方法①
上記例でいう、(食べる、寝る) は、詳細が定義出来ないメソッドのため、メソッド作成時にabstract
をつける事で、不完全なメソッドである事を定義出来る。
//メソッドの定義
アクセス修飾子 abstract 戻り値 メソッド名(引数);
abstracrt
でメソッドを宣言する事で曖昧なクラスのメソッドを定義し、以下の効果を得られる。
効果
・オーバーライドして、実装しないとエラーが発生するため、オーバーライドし忘れを防ぐ※曖昧なままインスタンス化されない
・定義出来ないのか、「何もしない」という定義なのか区別がつく
曖昧なクラスを定義する方法②
同じ様に上記の「人間」クラスの様に、曖昧なメソッドを持つクラスを定義する方法は、以下の通り。
//クラスの定義
アクセス修飾子 abstract class 戻り値 クラス名(引数);
ルール
1つでも、曖昧なメソッドをもつクラスは必ずabstract
をつける必要がある。
効果
・インスタンスとして生成出来ないため、誤ってインスタンス化されることを防ぐ
インターフェースについて
ルール
・全てのメソッドがabstract
を使用した抽象メソッド
作成方法
アクセス修飾子 interface インターフェース名(引数);
継承方法
アクセス修飾子 class クラス名 implements 親インターフェース名{
}
imprement = 実装するという意味
インターフェースを使用するメリット
インターフェースをimplementする事で、メソッドの実装が強制され、少なくともそのインターフェースを持っているメンバは保有する事が保証される。
特徴
・インターフェースのメソッドは自動的にpublic abstractが付く
・インターフェースのフィールドは必ずpublic static finalが付く
・多重継承が可能※詳細は下記に記載
多重継承について
ーーーーーーーーーーーーーーーーー(困った例)ーーーーーーーーーーーーーーー
・人間クラス
「移動メソッド」歩いて移動
・悪魔クラス
「移動メソッド」飛んで移動
↓多重継承して、デビルマンを生成!
「移動メソッド」どっちを継承すれば・・・???
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ーーーーーーーーーーーーー (インターフェースなら)ーーーーーーーーーーーーー
・人間インターフェース
「移動メソッド」未実装
・デビルインターフェース
「移動メソッド」未実装
↓多重継承して、デビルマンを生成!
「移動メソッド」実装:飛んで移動
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
要するに、、、移動
の様なメソッドはいろんなクラスが持つ可能性があるため、実装が衝突してしまう恐れがある。
しかし、インターフェースの場合、実装されていないため、メソッドが被っても子インターフェースで実装するため衝突しない。そのため、インターフェースは多重継承が可能。
多重継承の方法
アクセス修飾子 class クラス名 implements 親インターフェース名1,親インターフェース名2・・・{
}
extend implementsを同時に使う場合
アクセス修飾子 class クラス名 extends 親クラス名 implements 親インターフェース名1,親インターフェース名2・・・{
}
extend implementsの使い方まとめ
継承元 | 継承先 | 継承に使用するワード | 継承元の数 |
---|---|---|---|
クラス | クラス | extend | 1 |
インターフェース | クラス | implement | 1つ以上 |
インターフェース | インターフェース | extend | 1つ以上 |
Author And Source
この問題について(高度な継承), 我々は、より多くの情報をここで見つけました https://qiita.com/k_sk193/items/da0e9c4d982c044580a3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .