1. TOP
  2. Android
  3. AndroidStudio・なぜ型キャストするのか

AndroidStudio・なぜ型キャストするのか

目次


Javaの「オブジェクト指向」に関係してきますが、「型のキャスト」ってなぜ必要なのか・・。
簡単な例を使ってまとめていきたいと思います。

以前に記述したAndroidソースの確認


「AndroidStudioちっちゃなプログラムで学習(1)」の記事で少し触れた部分のソースです
(記事へのリンクはこちら)

    //表示用のテキストビューに出力
    TextView text=(TextView)findViewById(R.id.txVwResult);   
    String strResult="カーネルのバージョンは・・" + '\n' +verInfo + '\n' + "です";
    text.setText(strResult);

TextView text=(TextView)findViewById(R.id.txVwResult);
この部分で型キャストを行っています。なぜ必要なのかを考えます。

簡単な継承図でクラスの親子関係を学ぶ


簡単なクラス継承図をみる



実際の生態系とは違っていると思いますが、ここでの例です。

クラス継承図から読み取れるルール


クラス「いきもの」が一番の親クラスになります。ここでの特性(「生きる」「食べる・飲む」)はこの下の子クラスすべてに引き継がれていきます。

子クラスが初めて持つ特性は親クラスには存在しません。クラス「犬」には特性「ほえる」がありますが、親クラス「動物」「いきもの」には特性「ほえる」はありません。

親子関係のないクラス間では、特性が引き継がれません。クラス「犬」「猫」には、クラス「鳥」の特性である「飛ぶ」はありません。

子クラスは、親クラスの特性も引き継いでいるため、親クラスとしても振る舞うことが出来ます。クラス「犬」「猫」であればクラス「動物」として振る舞うことが出来ます。
クラス「犬」「猫」「鳥」「動物」全てがクラス「いきもの」として振る舞うことが出来ます。

ゆえに、クラス「犬」「猫」「鳥」「動物」のもの全てをまとめてクラス「いきもの」として扱うことが出来ます。
ただし、実際は「犬」であったとしても、「いきもの」クラスとして振る舞っている場合は、クラス「犬」の特性である「ほえる」ことは出来ません。「いきもの」クラスには「ほえる」特性がないためです。

少しややこしくなってきましたが、ここが重要です!
「犬」は「いきもの」として振る舞うことが出来ます。
ただし「いきもの」の状態では「ほえる」ことは出来ません。「ほえる」ことをさせたければ「いきもの」クラスから「犬」クラスに変換してあげればいいのです。
(「猫」クラスであるものを「いきもの」から「犬」に誤変換してしまった場合はエラーになります)


スポンサードリンク



TextViewの継承図で型キャストが必要な理由を知る


上で学んだことをもとに、実際の継承図を見てみます。

TextViewのクラス継承図をみる



親子継承関係を確認


先ほどと同じように親子関係を見てみます。

「Object」クラスが一番の親クラスであり、この特性は全ての子クラスに引き継がれます。

「Object」の下に「View」クラスがあり、さらにこの下に「TextView」クラスがあります。今回はこの「TextView」クラスと「setText」メソッドについて調べています。

「TextView」クラスには「setText」メソッドがありますが「View」クラスには「setText」メソッドはありません。

「TextView」クラスは「View」クラスとして振る舞うことが出来ます。が、「View」クラスとして振る舞っているときは「setText」メソッドを使うことは出来ません。

そしてまた、重要なところです
「TextView」は「View」として振る舞うことが出来ます。
ただし「View」の状態では「setText」メソッドを使うことは出来ません。メソッドを使う場合は「View」クラスから「TextView」クラスに変換(キャスト)してあげればいいのです。

結局、型キャストとは


再度、最初に見たソースを確認します。
    //表示用のテキストビューに出力
    TextView text=(TextView)findViewById(R.id.txVwResult);   
    String strResult="カーネルのバージョンは・・" + '\n' +verInfo + '\n' + "です";
    text.setText(strResult);

「findViewById」メソッドは「View型」として画面上のパーツを返してきます。画面上に配置されるパーツは地図や文字、ボタン等色々なものがあります。それぞれ色々なクラス型になっています。この色々なクラスに対応するために、親クラスである「View型」として返しているのです。


画面上にある「txVwResult」という名称のパーツ(「TextView」型)を「findViewById」メソッドで取得しています。戻ってくるのは「View型」であるため、戻り値を「TextView」型にキャストし、「TextView」型の変数「text」に格納しています。

表示する文字列を用意して変数「strResult」に格納し、「TextView」型の変数「text」の「setText」メソッドに渡しています。
これにより、画面上にある「txVwResult」という名称のパーツ(「TextView」型)に文字列が表示されます。
型キャストしているのは、「View」型のままでは「setText」メソッドが使えないためでした。



「Android studioに関する書籍」を

「パソコン」を
yahooで探す     
    
「パソコンバッグ」を

スポンサードリンク


コメントを書き込む

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。

CAPTCHA