美人すぎない化粧品販売員がアプリ開発を目指す

Javaの構文、オブジェクト指向、APIなど、プログラミング初心者の私がアプリ開発までに理解したことをまとめたブログ

正しい継承 is-aの原則

☆ 正しい継承

 

   「is-aの原則」と言われるルールに則っている継承

 

is-aの原則とは?

 

 子クラスは親クラスの一種であるということ

 

 

 ex. 親 Hero   子 SuperHero

          SuperHeroはあくまでHeroの一種

 

 

 

☆ 間違った継承

 

 概念としてis-aの関係がないにも関わらず、継承を使ってしまうこと

 

 

 ex.  親 Item ...メソッド (名前)(値段)

    子 House... メソッド (名前)(値段)(住所)

 

メソッドの内容で重複する部分があるので、継承した方が便利そう

 

ただis-aの関係に当てはめてみると、、、

  House is a Item (家はアイテムの一種である)←?

 

「is-aの原則」が成立しないならば、楽が出来るとしても継承を使ってはならない

 

 

 

なぜ?

 ・将来クラスを拡張していった場合に現実世界と矛盾が生じるから

 

 ・オブジェクト指向の3大機能の1つ「多様性」を利用できなくなるから

 

 

 

ex. 親クラスItemに(投げてダメージ)というメソッドを追加

            ↓

 自動的にItemを継承した子クラスHouseにも(投げてダメージ)というメソッドが追加される、、、家を投げる? 

   

 

 

 

正しい継承をしていくと

 

 

  親クラス 「一般的、抽象的、曖昧なもの」 汎化

  

   ⇩

  

  子クラス 「特殊で具体的なもの」     特化

        (親クラスを元にどんどん機能を追加していくから)

 

 

 

イメージ図

     上にいく程クラスが汎化していくことを表す

 

 

     親  Character      汎化(曖昧、一般的)

          ↑

     子       Hero

                                 ↑

     孫  SuperHero                    特化(具体的、特殊)