2

重複の可能性:
インターフェースの「オブジェクト」の作成

私はJavaを初めて使用します。私の理解に基づく:

  • をインスタンス化することはできませんInterfaceclassを実装するをインスタンス化することしかできませんinterface
  • キーワードは、newクラスからオブジェクトを作成するために使用されます。

ただし、一部のJavaプログラムのソースコードを読んだときに、インターフェイスがインスタンス化されることがあることがわかりました。例えば:

例1:

JButtonObject.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        //codes
    }
});

例2:

SwingUtilities.invokeLater(new Runnable()
{
    public void run()
    {
        //codes
    }
});

上記の例では、ActionListenerとRunnableはどちらもJavaインターフェースです。これらのコードでインスタンス化できる理由を教えてください。

インターフェイスをインスタンス化する目的は何ですか?この例を参照すると、インターフェースを実装するクラスのインスタンスを作成する必要があるようです。

4

3 に答える 3

6

そのコードはインターフェースをインスタンス化するのではなく、ActionListenerまたはを実装する匿名クラスをインスタンス化しますRunnable

匿名クラスは、名前のないローカルクラスです。匿名クラスは、 new演算子を使用して、単一の簡潔な式で定義およびインスタンス化されます。

コードはActionListener匿名のインスタンスを作成しています。つまり、クラスには実際には名前がありません。

そのクラスをコンパイルするとYourClass$1.class、出力にクラスが表示されます。単に、$1クラスが匿名クラスであり、番号1がコンパイラによって生成されることを意味します。2つの匿名クラスがある場合、コンパイルされたクラスのようなものがYourClass$1.classあります。YourClass$2.class

見る

于 2012-06-17T05:13:58.657 に答える
1

上記の例では、インターフェイスの新しいインスタンスは作成されません。新しいキーワードの後に​​、現在のインターフェイスの実装メソッドがあります。匿名クラスについてもっと読む。

于 2012-06-17T05:14:17.457 に答える
0

このフォームは、インターフェイスを実装するオブジェクトを簡単に作成できるようにするための省略形です。インスタンス化されるのはインターフェイス自体ではなく、Object implements Runnableたとえばです。

于 2012-06-17T05:14:10.143 に答える