googletag.defineSlot('/21812778492/blog_468x60_common_eyecatch02_adsence', [728, 90], 'div-gpt-ad-1567575393317-0').addService(googletag.pubads()); Javaでは、あるクラスのオブジェクトから別のクラスのオブジェクトへは、原則としてキャストを行うことはできません。 それは、あるクラスと別のクラスのフィールドやメソッドが一致していないからで … クラス階層のルートであるObject型と、intやdoubleなどのプリミティブ型のキャストについて説明しています。簡単なサンプルソースコードと、分かりやすい解説を掲載していますので、キャストでお困りの方は、是非ご一読ください。 googletag.defineSlot('/21812778492/blog_728x90_common_overlay_adsence', [728, 90], 'div-gpt-ad-1583302554779-0').addService(googletag.pubads()); }); みなさんは、ある型から別の型に変換するキャストという言葉は聞いたことがありますか?, といった基本的な内容から、応用的な内容に関しても解説していきます。今回はキャストについて、使い方をわかりやすく解説します!, ある型から別の型に変換することをキャストといいます。利用シーンとしては「型は変えたくないけど、一時的に別の型として扱いたい」といったことが考えられます。例えば、整数型のテストの点数から、小数点以下第1位までの平均点を求めたい、などです。, これからご紹介する例はint型の2つの変数で割り算を行う場合に、計算結果が自動的にint型になる例です。自動的に型変換されることを暗黙的なキャストといいます。, このサンプルコードの実行結果を確認すると、3.3333…となってほしいところが、きれいに3.0となってしまいました。確かに結果を代入する変数resultはfloat型になっているので、小数点以下も代入可能のようにみえます。, しかしi / j の計算をした時に、両者がint型なので結果も自動的にint型になります。よって、小数点以下が切り捨てられて3となります。その結果をfloat型に代入しても、整数3をfloat型に代入することになるので3.0となるだけです。小数点以下まで計算するとすれば、最初から変数をfloat型で宣言するのが一番簡単です。, 先ほどのサンプルコードでは、int型の2つの変数で割り算を行い結果が自動的にint型になりました。小数点以下を含むfloat型の結果を得たい場合は、キャストを使って変更することが可能です。サンプルコードで確認していきましょう。, このサンプルコードの実行結果を確認すると、想定通りの結果が得られました。このように、元の変数の型はそのままで、一時的に宣言時とは別の型に置き換えることをキャストといいます。, 今回はint型をfloat型にしましたが、それ以外にも基本型であれば基本的にキャストは可能です。, float型とdouble型では、double型の方が表現できる桁数が大きいです。ということは、floatの最大桁数より大きい数値がiやjに入っていた場合は、より小さい桁数をもつ変数resultに押し込めようとしているので、エラーになります。この例では、あえて大きい型にキャストして小さい型に代入しようとしました。, 一方、桁数が大きい型で宣言した変数をより小さい型の変数に代入する際、キャストして型変換すると代入が可能になります。, キャストする際は、元の基本型のデータ範囲とキャスト後の基本型のデータ範囲に注意する必要があります。, データ範囲が大きい基本型から小さい基本型へキャストすると精度が保証されません。ご注意ください。, このサンプルコードでは、double型の最大値をint型にキャストして、int型の変数に代入しています。, エラーにはなりませんが、int型の最大値に置き換わってしまって精度が保証さず、意図しない値となっています。, スーパークラスを継承するサブクラスがあるとします。スーパークラスのオブジェクトにサブクラスのインスタンスを格納することをアップキャストといいます。, アップキャストはサブクラスからスーパークラスへ型変換されることになります。アップキャストは自動的に行われる暗黙的型変換ということになります。, 自動的に型変換が行われるのは、サブクラスがスーパークラスのすべてのメンバーを保証できるためです。, サブクラスからスーパークラスにアップキャストする場合についてサンプルコードで確認していきましょう。, このサンプルコードでは、SubClassのインスタンスsbをSuperClass型のオブジェクトscに格納しています。scの型はSuperClassの型で、SubClassのメソッドをメンバに持つわけではありません。したがって、method2メソッドを実行するとコンパイルエラーとなるのでコメントアウトしています。, どのフィールド変数、メソッドが使えるかはオブジェクトの型で決まります。インスタンスの型がサブクラスでも、オブジェクトの型がスーパークラスなら、スーパークラスのフィールド変数およびメソッドしか使えません。, サブクラスのオブジェクトをスーパークラス型のオブジェクトでアップキャストする際、注意点があります。スーパークラスとサブクラスに、同じ名前のフィールド変数やメソッドがある場合には、フィールド変数はスーパークラス、メソッドはサブクラスが優先される、という点です。, このサンプルコードでは、SubClassはSuperClassを継承しています。(1)は参照変数とsbともにSubClassなので、3と18が表示されたのは分かりますが、(2)は2と18と表示されています。, このことから、フィールド変数はスーパークラス、メソッドはサブクラスが優先されたのが分かります。継承しているので、SubClassはSuperClassのメンバーを内包していますが、メソッドはオーバーライドして、フィールド変数は同じ名前のフィールド変数を宣言して隠蔽しています。, アップキャストとは逆に、サブクラスのオブジェクトにスーパークラスのオブジェクトを格納することをダウンキャストといいます。, スーパークラスからサブクラスにダウンキャストする場合は明示的にダウンキャストを行う必要があります。, これはスーパークラスはサブクラスのすべてのメンバーを保証できないためです。明示的にダウンキャストするには基本型のキャストの場合と同じように「()」を使って記述します。, また、ダウンキャストは一度アップキャストしたオブジェクトに対してのみ使用することができます。, アップキャストされていないオブジェクトをダウンキャストすると、ClassCastExceptionの例外が発生するので注意しましょう。, このサンプルコードでは、まずサブクラスのインスタンスをスーパークラス型のオブジェクトに格納してアップキャストしています。その後、明示的にダウンキャストしています。, 先ほどアップキャストされていないオブジェクトをダウンキャストすると、ClassCastExceptionの例外が発生すると説明しました。ダウンキャストができるか確認する方法があります。それはinstanceof演算子を使う方法です。, instanceof演算子はオブジェクトが指定したクラス型もしくは指定したクラスを継承しているか比較します。サンプルコードで確認していきましょう。, このサンプルコードでは、instanceof演算子を使ってダウンキャストできるか確認しています。SuperClassのオブジェクトsc1にはSubClassのインスタンスを格納し、暗黙的にアップキャストされています。, そのためinstanceof演算子でサブクラスの型と比較するとtrueを返し、ダウンキャストが実行されています。SuperClassのオブジェクトsc2はSubClassのインスタンスでもSubClassを継承したクラスのインスタンスでもないため、ダウンキャストは実行されていません。, このようにダウンキャストを使用する場合はClassCastExceptionの例外が発生しないように、instanceof演算子を使って確認するようにしましょう!, String型の型変換については、こちらで詳しく説明していますので、ぜひ参考にしてくださいね, キャストは、一時的に宣言した型とは異なる型として扱いたいときに使われます。基本型の場合は理解しやすいですが、クラスの場合はいろいろとルールがあって、最初は理解が難しいかもしれません。, 当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。
googletag.defineSlot('/21812778492/blog_300x250_common_sidemiddle01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565198726712-0').addService(googletag.pubads());
googletag.defineSlot('/21812778492/blog_300x250_common_fixed02_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565198391774-0').addService(googletag.pubads()); googletag.pubads().setTargeting('blog_type', 'Tech'); var googletag = googletag || {}; googletag.pubads().collapseEmptyDivs(); googletag.defineSlot('/21812778492/blog_300x250_common_ctc02_adsence', [300, 250], 'div-gpt-ad-1566564559478-0').addService(googletag.pubads()); // fixed01のWORKSが不定期なため共通処理とする googletag.cmd = googletag.cmd || []; googletag.enableServices(); Javaプログラミングにおけるキャスト(型変換)の仕方や注意点などを型ごとに分けて説明しています。 Java応用編. googletag.defineSlot('/21812778492/blog_728x90_common_overlay', [728, 90], 'div-gpt-ad-1584694002281-0').addService(googletag.pubads()); googletag.defineSlot('/21812778492/blog_300x250_common_fixed01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565194485392-0').addService(googletag.pubads());

.

あつ森 とうろう 住民 9, 時計 サファイアガラス 傷 8, スペイン ムール貝 缶詰 食べ方 4, Jr東日本 名取駅 電話番号 7, Go Tcha Evolve 外し 方 13, 雨の日 英語 フレーズ 10, 日傘 折りたたみ ブランド 4, Ps3 コントローラー 1234 点滅 21, A5 サイズ 郵便料金 4, カブ アルミ ボックス 4, 作曲家 日本人 昭和 10, Ide Sata 変換アダプタ 認識しない 7, アイスマート グランセゾン 住設 4, エアコン取り付け 穴 失敗 5, 君に届け 実写 菜々緒 48, Pentax K 1 Mark Ii 作例 6, ベビー フェイス カメラアプリ 4, Levvvel Coin Master 4, 桜蘭高校ホスト部 特別編(2年後 ネタバレ) 5, Ban Ds1 取付説明書 8, Hdd 増設 Bios設定 4, チャンバー 音 小さく 4, Benq モニター 音が出ない 4, 自作 Iem ドライバ 7, Toeic Ipテスト オンライン 問題 15,