私はこのコードに何度か出くわしましたが、それが何を意味するのか、またはそれが何に相当するのか知りたいです:
A a = new A() {
// declare some methods and whatever
};
上記はどういう意味ですか?それは何と同等ですか(それが何かと同等である場合)?
私はこのコードに何度か出くわしましたが、それが何を意味するのか、またはそれが何に相当するのか知りたいです:
A a = new A() {
// declare some methods and whatever
};
上記はどういう意味ですか?それは何と同等ですか(それが何かと同等である場合)?
彼らは匿名のクラスを宣言しています。クラス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
匿名クラスを作成する代わりに、のクラスファイルを作成し、クラスの新しいインスタンスを作成することもできます。つまり、別のクラスで必要なすべてのことを実行できると仮定します。多くの場合、匿名クラスと内部クラスは、外部クラスのフィールドとメソッドにアクセスできるように定義されています。また、内部クラスが外部クラスに「属し」、他の誰にも属していない場合、内部クラスまたは匿名クラスを定義することは、何倍もオブジェクト指向です。
匿名の内部クラスを作成しています。これは、それ自体ではなく、新しく作成されたのサブクラスのa
インスタンスです。A
A
public class MadeUpName extends A {
...
}
A a = new MadeUpName();
しかし、を構成する必要はなく、MadeUpName
言葉遣いも少なくなります。
匿名のクラスです。私はそれらを広範囲に使用したことはありませんが、クラスを1回だけ使用する場合や、最上位のクラス階層をあまり再利用されないもので「汚染」したくない場合に便利です。 。
それらをクラス内(標準のpublic、private、protectedキーワードを使用)またはクラスメソッド内(内部クラス)に配置できます。
私は本当に素晴らしく簡潔な記事/チュートリアルを見つけることができませんでしたが、これは問題ありません:
関連している:
これは、クラス/インターフェースAを拡張/実装する匿名クラスのインスタンス化です。