2012-05-08 2 views
3

私はJava試験の準備をしています。 osが同じオブジェクトを指して、両方の参照ですので、私は、次の質問オブジェクトのスーパークラスとキャストに関する質問

String s = new String ("hello"); 
Object o = (object) s; 

に出くわし、参照o超える参照sてオブジェクトにアクセスするに違いはありますか?

私はs(Sにより、基準となるような)すべてのオブジェクトは、JavaでObjectのサブクラスであることを言って、そのように参照を使用して、あなたがclone()のようなスーパーObjectで知られているメソッドを呼び出すことができるようになります右のだろうStringによって知られる方法は、length()のようなものである。一方、スーパークラスオブジェクトリファレンスoは、それ自身のメソッドであり、サブクラスのメソッドではないということができますか?ありがとう。

+6

はい、このステートメントは正しいです。 –

+0

あなたは正確です。 – Sheriff

+0

2つの小さなメモ:sを 'Object'に明示的にキャストする必要はありません(アップキャストは常に暗黙的に可能です)。' new String( "hello") 'を作成する必要はありません。 'String s =" hello "'と 's'は' String'オブジェクトへの参照になります。これはコードと同じですが、別の場所に存在します(GCのヒープではなくpermgen ")。 – yshavit

答えて

1

違いは、oを使用すると、文字列に変換しない限り、文字列固有のメソッドを呼び出すことができなくなることです。

ただし、Stringクラスで定義されているoを呼び出すメソッドは、メソッドのそれ以降のバージョンを呼び出します。たとえば、o.toString()は "hello"を返し、Object.toString()が通常返す記述子ではありません。これを多型といいます。

関連する問題