Javaの初心者、匿名の内部クラス(20)


匿名クラスの役割は一般的に1回のクラスを使うだけで、多重化する必要はなく、一時性が強く、C#にも匿名クラスがありますが、C#3.0で加入します.
var myVar = new
{
    field_string = “abcd”
    field_int = 12;
};

Javaのフォーマットはとても異なっていて、定義もとても異なっています
new親コンストラクタ(実パラメトリックリスト)|実装インタフェース()
{
           //匿名内部クラスのクラス部分
}
匿名の内部クラスは、親クラスを継承するか、インタフェースを実装しなければならないが、最大1つの親クラスを継承するか、インタフェースを実装するしかない.
匿名クラスは抽象クラスではありません.匿名クラスを作成すると、匿名内部クラスのオブジェクトがすぐに作成されるからです.
匿名クラスはコンストラクタを定義できません.匿名クラスにはクラス名がないためです(この理由で、なんていうか、コロナ・・・)、インスタンス初期化ブロックを使用してコンストラクタの代わりに使用することができ、クラスを継承するときに親クラスに似たコンストラクタを持つこともできます.
public interface Product 
{
	public double getPrice();
	public String getName();
}
public class TestAnonymous 
{
	public void test(Product p)
	{
		System.out.println("     " + p.getName() + ",   " + p.getPrice());
	}
	public static void main(String[] args) 
	{
		TestAnonymous ta = new TestAnonymous();
		//  test   ,      Product  ,              
		ta.test(new Product()
		{
		   public double getPrice()
		   {
			   return 567.8;
		   }
		   public String getName()
		   {
			   return "AGP  ";
		   }
		});
	}
}
印刷:AGPグラフィックスカードを購入し、567.8を費やした
Javaの匿名内部クラスはC#が簡潔で柔軟ではないように見えますが、匿名クラスの親クラスまたはインタフェースを定義する必要があります.
また、匿名の内部クラスがアクセスする外部クラスのローカル変数はfinal修飾でなければなりません.