2017-04-02 6 views
-3

2つのオブジェクトをイコライズするとどうなりますか?例えば;2つの異なるオブジェクトを均等化する

Person p = new Person(); 
Student s = new Student(); 
p=s; 

(PersonクラスがStudentクラスの親である。)

私はp=sを書くとき、なぜ私は、pからの学生の特別なメソッドを達成することはできませんか? (ダウンキャスティングのように)私はこの声明の働く仕組みは何か?

+4

2つの異なるオブジェクトを「均等化」していません。作成された新しいPersonオブジェクトを破棄し、p変数の参照をStudentオブジェクトの参照に再割り当てします。コンパイラは、pがPerson変数であることだけを知っているので、Personメソッドだけを直接利用することができます。 Studentメソッドはそこにあり、pをStudentにキャストする場合にのみ利用できます: '((Student)p).studentMethod();'。あなたが間違ってキャストするなら、これには危険があります。 –

+0

sへの参照はp〜を指しています – lpgad

答えて

1

PersonクラスはStudentクラスの親です。さもなければあなたのコードはコンパイルされません。

あなたはPersonオブジェクトへの参照を保持することになっていることpStudentクラスのインスタンスの参照を格納しているp=s呼び出します。

pでStudentクラスメソッドを呼び出そうとすると、コンパイラはpにPerson個のオブジェクトしか保持できないことを知っているため、コンパイラはエラーを発生させます。 Studentメソッドに電話するには、タイプキャストを使用する必要があります。

((Student)p).someStudentMethod(); 
関連する問題