Carpe Diem

  Top > スポンサー広告> オブジェクト指向 > オブジェクト指向の勉強その3  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

オブジェクト指向の勉強その3

2012 - 01/09 [Mon] - 01:31

◆抽象クラス
あんまり使わない.けどインタフェースの理解になるから学ぶといい

抽象クラスはポリモーフィズムを強制させる
抽象クラスではメソッドの名前だけで,中身を書かない→サブクラスで中身を書かないと(オーバーライトしないと)ダメ=ポリモーフィズム
書かないとコンパイルエラー

「メソッドを必ずオーバーライドさせたい!」→「じゃあそのメソッドにabstractを付けよう」→「そしたらクラスにもabstract付けなきゃ」と、目的から逆に考えた方が分かりやすいかも

なんで抽象クラス使うの?なくても普通のオーバーライドでよくない?
→タイポすればコンパイルエラーでるから.普通のオーバーライドだと,タイポしたら上書きされずにスーパーのメソッドが実行される.実行するまで気づかない

抽象クラスはインスタンス作れない.抽象クラスは中身がないから.そもそも「抽象=実体(インスタンス)がない,理論上の」だし.
抽象クラスの参照型変数は作れる.参照型変数はあくまで参照の入れ物(箱)だから


◆インタフェース
インタフェースが理解できればオブジェクト指向に大きく近づく

インタフェースは抽象クラスを強力にしたもの

インタフェースは
・フィールドを持てない(public static finalなフィールドはOK)
・抽象メソッドしか書けない→だから実装クラス(サブクラスみたいな)が必須

インタフェースでは「オーバーライド」とは言わず「実装」という

インタフェースの抽象メソッドは自動的にpublicなメソッドになるので、実装メソッドにはpublicを付ける必要がある

インタフェースは多重継承ができる.というより継承+多重実装?
1つのクラスと1つのインタフェースから1つのサブクラスを継承することができる
サブクラスインスタンスの中にスーパークラスインスタンスとインタフェースが含まれる
クラスから継承しつつインタフェースを実装したり、複数のインタフェースを実装することが可能

キャスト
class AClassSub extends AClass implements AnInterface のとき
AClass refAClass2 = new AClassSub();
AnInterface refAnInterface = (AnInterface)refAClass2;

のダウンキャストができる.なぜなら全てを包括するサブクラスのインスタンスを持っているから.

スーパークラスからインタフェースへの直接のキャストをするとどうなるか?
クラスの場合、インタフェースのように「サブクラスが他のクラスから継承している」なんてことは絶対にない.
けどインタフェースは自由に実装できるので,実行するまで分からない=コンパイル時にエラーにはならない.

インタフェースはクラスじゃない
クラスのtreeにはインタフェースは含まれない.クラスにくっつく

インタフェースはインスタンスを作らない.インタフェースの実装クラスはインスタンスを作る

インタフェースはメソッドにひも付けするためのもの.新しくメソッドを作らなくても、スーパークラスのメソッドにひもを付けることができ、インタフェースを通してそれを呼び出すことができる

けど正直サブクラスにメソッド書いて行けばよくない?
参照型変数をインタフェースにすることでポリモーフィズムが可能.
インタフェースがなければそれぞれわざわざインスタンスに対応する参照型変数を作成する必要がある→変更に強くない

インタフェース最大の特徴は「したい」と「する」を分けられること
「したい」をインタフェースに書き、「する」を実装クラスに書く

Aグループが「したい」メソッドをインタフェースに抽象メソッドとして書く

ダミーの実装クラスを書く

ダミーのメソッドを使用して,全体のテストが可能になる

ダミー部をBグループが作成したら入れ替えればいい.

インタフェースのメリットは「クラスを制限しないこと」
抽象クラスなら,使えるのはそのサブクラスのみ.


インタフェースを使うことで、Aグループの「したい」とBグループの「する」を分けることができて、それぞれが自由に作り、あとでくっつけるということが可能


◆メモ
ポリモーフィズムのためか
superclass ref = new subclass

interface ref = new implementclass

って書き方をよく見る.

コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。