【JAVA学習メモ】2024/04/10

この動画の「参照型の型変換」を学習。

少しずつ難しくなってきました。つまずきそうになったところをメモ。

 

ソースコードの埋め込み方法を以下を参照

【はてなブログカスタマイズ】「Google Code Prettify」⚙️でソースコード🔧を表示する方法🖥😁✨ – 黒猫のゲームチャンネル (blackcat-game2020.com)

 

StuSample5.javaソースコード

 StuSample5.javaソースコード
public class StuSample5{ public static void main(String[] args){ /*Student5クラスのインスタンスを生成し使える状態にする。*/ Student5 stu1 = new Student5("菅原",1); Person5 psn = stu1; /*インスタンス名.インスタンスメソッド()*/ psn.display(); // psn.chgStuNo(1001); /* 補足:instanceofキーワード オブジェクトのクラスを特定する 対象オブジェクト instanceof クラス名 -encoding SHIFT-JIS*/ if(psn instanceof Student5){ Student5 stu2 = (Student5)psn; stu2.chgStuNo(1001); stu2.display(); } } }



Person5 psn = stu1;で何が起きているかわからない。

`Student5 stu2 = (Student5)psn;` この行は、`psn`というPerson5型の変数が指すインスタンスを、Student5型の変数`stu2`にキャストしています。

具体的には、`psn`が参照しているインスタンスは、Student5クラスのインスタンスであることがif文で確認されています(`psn instanceof Student5`)。そのため、`psn`が指すオブジェクトをStudent5型にキャストすることが安全であることがわかります。

キャスト演算子`(Student5)`は、`psn`が指すオブジェクトをStudent5型に変換し、それを`stu2`に代入します。これにより、`stu2`はStudent5型のインスタンスを参照することになります。

キャスト(cast)は、プログラムにおいて、あるデータ型を別のデータ型に変換する操作を指します。Javaにおいては、基本データ型やオブジェクトの参照型に対してキャストが使用されます。 (ChatGPTより)

そもそもキャストとは?

キャストには主に2つの種類があります:

1. 明示的キャスト(Explicit Cast): データ型を明示的に指定して、変換を行います。この場合、変換元の型が変換先の型に変換可能であることが保証されている必要があります。変換元の型を括弧で囲み、変換先の型を記述します。

    double d = 3.14;
    int i = (int) d; // 明示的なキャスト。dをint型に変換してiに代入

2. 暗黙的キャスト(Implicit Cast): コンパイラが自動的に行う型の変換です。変換元の型が変換先の型と互換性がある場合にのみ行われます。通常、小さいデータ型から大きいデータ型への変換や、サブクラスからスーパークラスへの変換などで行われます。

    int i = 10;
    double d = i; // 暗黙的なキャスト。int型からdouble型への変換

キャストは、データ型の精度を失う可能性があるため、注意して使用する必要があります。また、不正確な型変換を行うと、プログラムの実行中にエラーが発生する可能性があるため、適切な型の変換を行うことが重要です。(ChatGPTより)