1

私はこのコードに何度か出くわしましたが、それが何を意味するのか、またはそれが何に相当するのか知りたいです:

A a = new A() {
  // declare some methods and whatever
};

上記はどういう意味ですか?それは何と同等ですか(それが何かと同等である場合)?

4

4 に答える 4

6

彼らは匿名のクラスを宣言しています。クラスAは(おそらく)インターフェースまたは抽象クラスのいずれかであり、のサブクラスになるためにメソッドを実装する必要がありますA。Javaでは、匿名クラスを使用してこれらのメソッドをその場で定義できます。

たとえば、に対して実装するメソッドは1つだけです。ActionListenerそれはactionPerformed(ActionEvent)です。多くの場合、次のように匿名クラスでそのメソッドを定義する方が簡単です。

ActionListener myListener = new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();
    // do other stuff for action performed
  }
}

OPのコメントに応じて編集する

ActionListener匿名クラスを作成する代わりに、のクラスファイルを作成し、クラスの新しいインスタンスを作成することもできます。つまり、別のクラスで必要なすべてのことを実行できると仮定します。多くの場合、匿名クラスと内部クラスは、外部クラスのフィールドとメソッドにアクセスできるように定義されています。また、内部クラスが外部クラスに「属し」、他の誰にも属していない場合、内部クラスまたは匿名クラスを定義することは、何倍もオブジェクト指向です。

于 2012-05-01T01:40:46.820 に答える
4

匿名の内部クラスを作成しています。これは、それ自体ではなく、新しく作成されたのサブクラスのaインスタンスです。AA

public class MadeUpName extends A {
    ...
}
A a = new MadeUpName();

しかし、を構成する必要はなく、MadeUpName言葉遣いも少なくなります。

于 2012-05-01T01:43:49.463 に答える
2

匿名のクラスです。私はそれらを広範囲に使用したことはありませんが、クラスを1回だけ使用する場合や、最上位のクラス階層をあまり再利用されないもので「汚染」したくない場合に便利です。 。

それらをクラス内(標準のpublic、private、protectedキーワードを使用)またはクラスメソッド内(内部クラス)に配置できます。

私は本当に素晴らしく簡潔な記事/チュートリアルを見つけることができませんでしたが、これは問題ありません:

一言で言えば、Javaからの匿名クラス

関連している:

于 2012-05-01T02:02:59.883 に答える
1

これは、クラス/インターフェースAを拡張/実装する匿名クラスのインスタンス化です。

于 2012-05-01T01:40:34.987 に答える