試験のサンプル、私はそれを得た場合好奇心

質問は:

o f メソッドを含む型 A オブジェクトを指す Object 型の参照であり、 toString メソッドを使用します。 toString f の両方にパラメータはありません。 toString メソッドを呼び出すステートメントと、 f メソッドを呼び出すステートメントを表示します。

答えは:

 f();
 toString();
5

2 答え

いいえ、それは正しくありません。まず、メソッドを呼び出すためにインスタンス o を使用していません。インスタンスを指定しなければ、コンパイラはこれらのメソッドを this で暗黙的に呼び出すようにします。

第2に、 f Object のメソッドではないので、 o.f()を呼び出すことはできません。 o A 型であることをコンパイラに伝えるには、明示的なキャストが必要です。

Object o = new A();
String s = o.toString();
((A)o).f();

関連項目

12
追加された

関数を呼び出す範囲によって異なります。 A クラスのインスタンスメソッドで f toString を呼び出す場合は、正しいです。

A クラスの静的メソッドや他のクラスのメソッドで f toString を呼び出す場合は、新しい A オブジェクトを作成し、その上で関数を呼び出します。

A myA = new A(); //Assuming the existence of a no-args constructor
myA.f();
myA.toString();

参照が厳密に Object 型の場合、 A 型に最初にキャストしない限り、 f を呼び出すことはできません。

1
追加された
Markが指摘するように、 o A のインスタンスを参照しているにもかかわらず Object コード> f 。
追加された 著者 Ted Hopp,
はい。私はあなたがそれを追加する前に私のコメントを投稿したと思います。
追加された 著者 Ted Hopp,
@TedHopp Mark Petersの答えははっきりと正しいですが、自分の啓発のために: "あなたの参照が厳密に Object の型であれば、最初に A "型にキャストしない限り、 f
追加された 著者 Jon Newmuis,