Person
別のクラスの一般化であるというクラスがあると想像してみましょうMan
。このクラスのインスタンスをいくつか作成する場合
Man man = new Man();
Person person = new Man();
ここで、変数から参照されているインスタンスのコンパイル時クラスman
はMan
であり、personのコンパイル時クラスはPerson
であり、両方のインスタンスの実行時クラスはですMan
。これまでのところ、実行時に作成されるインスタンスは両方ともクラスであるため、用語を完全に理解していますMan
。しかし、次のようにmanインスタンスをキャストする場所を指定すると
Person personMan = (Person) man;
なぜ実行時型personMan
はまだ人間なのですか?インスタンスのランタイムクラスは、新しいインスタンスが作成されたときにのみ設定されますか?また、実行時に変数のコンパイル時クラスを実際に取得する方法があるので、personManのクラスのタイプを照会できます(getClassは)を返しMan
ます。
編集:「クラスのコンパイル時クラス」は間違いでした(そしてあまり意味がありません)。私が意味したのは可変でした(したがって、彼らはpersonManがどのタイプのクラスであるかについて質問します:))