2011-11-01 1 views
8

これはおそらく非常に簡単な質問です。 私は学生で、比較的新しいJavaです。私は現在、明日の中間期に向けて勉強しています。インタフェース上での.getclass()の使用

System.out.println(interface1.getClass().getName());

interface1interface1 = class1として宣言されました:私は上で立ち往生午前練習問題の一つは、あなたが何かを持っているときに何が起こるかです。 interface1はクラスではないので、「class1」ではなく「interface1」ではないと確信していますか?コンパイル時にエラーが発生した場合は、そのように言います。私たちの教授は、私たちを欺くことで知られています。そして、私がクイズを取り戻し、なぜ私が問題を間違えているのか、まだ混乱しています。

+3

あなたについて、このプログラムを書いて、それを実行していることを自分でテストは何? –

+0

これ以上のコードはありますか?私たちは 'クラス 'が何であるか分からない。 – AusCBloke

+0

私は実際の中期のプログラムの多くでこれを実際にやっていますが、これはプログラムではなく単なる質問です。さらに私の下の紳士がまさにそのようにしたインターフェースについてもっと少し学びたいと思っています。 – Erik

答えて

10

class1を取得するインターフェイスだからではありませんが、getClass()はインスタンスの実行時クラスに解決されるためです。 class1という名前で作成したので、これがランタイムタイプです。あなたにコンパイル時のエラーはありません。

インターフェイスにClassオブジェクトを取得することは、リフレクションによって可能です。

別の方法としては、classキーワードを通じてより多くのクラスを直接アクセスすることができます。

String className = Runnable.class.getName(); 
+0

だから、基本的には、私はインターフェイスを使用してgetClass()メソッドは、常にクラスのインスタンスをするために定義したインターフェイスのクラスを返しますか? – Erik

+0

@Erikそうです。 getClass()はインスタンスのクラスの実装に解決されるためです。コンパイル時に静的に決定されるものではなく、動的に解決されます。本当により直接的な編集、user268396をありがとう。申し訳ありませんが、私は意味を作って、少し疲れて取得を停止します。 –

+0

ありがとう、うまくいけば明日私はAを得る:P – Erik

関連する問題