Carpe Diem

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

スポンサーサイト

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

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

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

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

前回の続き.同じく箇条書きのメモ

◆継承
継承はコピペしなくてもクラスを複製できる点がメリット

イメージは、サブクラスのインスタンスを作成すると、その中にスーパークラスのインスタンスが自動的に作成される。だからサブクラスの中身が何も書いてなくてもスーパークラスに書いてあれば色々できる。

ただし参照が結びついているのはサブクラスなので、スーパークラスのインスタンスとは別

オーバーライドはスーパークラスのフィールドやメソッドを同名で上書きする。
オーバーライドでスーパークラスのメソッドを修正できる。

スーパークラスからサブクラスは見えていない=サブクラスのメソッドをスーパークラスのインスタンスで使用することはできない。

けどダウンキャストを使用するとスーパーからサブを使用できる。

継承を繰り返した場合。オーバーライドはどれが優先される?
A。インスタンスを作成したクラスのメソッド

複数のスーパークラスを使ってひとつのサブクラスを作成(多重継承)はできない
理由:例えばスーパークラスでフィールド名やメソッド名がかぶっていたとき、どちらを使用するか判断できないため。

サブクラスとスーパークラスは別々。インスタンスを作って初めて一緒になる。だからサブクラスがスーパークラスを包括しているという表現は間違い。すごいのはサブクラスの「インスタンス」。

スーパーやサブは
スーパーセット・・・和集合なニュアンス(AUBのU)
サブセット・・・部分集合

オブジェクト指向では「インスタンスからクラスを考える」のが大切。
共通部分をスーパークラスにすればいい


◆ポリモーフィズム
参照型変数はインスタンス作成の型だけでなく、そのスーパークラスの型で作っても参照を結び付けられる。
=スーパークラスの参照型(箱)へ、サブクラスの参照(名前)を入れる→アップキャスト

イメージ的にはint から long へのキャスト

けどインスタンスの型自体が変わるわけじゃない。→じゃあ一旦スーパーの型に参照を入れて、次にサブのクラスへコピーしたらサブのメソッドは使える?
→そもそも参照型が違うからコピーできない.コンパイルエラー→できた.ダウンキャストする.

参照のコピーもアップキャスト

アップキャストでオーバーライドしたメソッドを使用すると,オーバーライドしたサブ側が優先.だから「インスタンスの型自体が変わるわけじゃない」ということ

samplesuper ref = samplesuper.returnSubInstance();

みたいにすればオーバーライドが便利と感じるし,ポリモーフィズムを体験できる

ポリモーフィズムは結果が掴みにくい機能

Objectクラスはすべてのクラスのスーパークラス.だからどのクラスもObjectクラスのメソッド(toStringとか)を使えるし,
Object ref2 = ref
のようにアップキャストできる.

ダウンキャスト.こっちはキャスト演算子が必要
samplesuper ref1 = new samplesub();
samplesub ref2 = (samplesub)ref1;

アップキャスト・ダウンキャストしても参照型変数の型が変わるだけでインスタンスは変わらない.
キャストする以前で保存したデータも引き継がれる.

ただしダウンキャストは,インスタンスがダウンキャスト先の型でないとダメ.つまりスーパークラスでインスタンスを作って,そのサブクラスへダウンキャストはできない.スーパーがサブを参照できないように.
キャストは名前(参照)を入れる箱(参照型変数)を変えるだけなので,中身(インスタンス)は一緒.なのでインスタンスにないメソッドは呼び出せない
ただし,スーパーとサブの関係であればコンパイル時にエラーは起きない.実行時にエラー.サブ1,サブ2の関係で無理にダウンキャストするとコンパイル時にエラーがおきる.→インスタンスの中にある型にのみキャストできる.
サブ1からアップキャストしてスーパーへ,そこからダウンキャストしてサブ2はコンパイルできる.けどインスタンスの型は当然違うから実行時にエラー

インスタンスの型を調べるには「instanceof」を使う.
参照型変数 instanceof クラス名

コメントの投稿





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

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

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