1. 程式人生 > >java匿名內部類的使用注意事項

java匿名內部類的使用注意事項

1、首先匿名內部類要繼承自抽象基類或者實現基類介面

like this

	abstract class Seed{
		int cnt;
		public Seed(int x){
			cnt=x;
		}
		abstract void showInfo();
	}
	class Apple{
		int num=300;
		public Seed getSeed(final int x){
			return new Seed(x){
				public void showInfo(){
					System.out.println("The apple's seeds are "+num);
				}
			};
		}

2、在類的內部不能對父類欄位進行初始化,除非使用初始化塊,也不能對外部類的子段進行更改

這樣是不行的,//!註釋部分是不正確的

	abstract class Seed{
		int cnt;
		public Seed(int x){
			cnt=x;
		}
		abstract void showInfo();
	}
	class Apple{
		int num=300;
		public Seed getSeed(final int x){
			return new Seed(x){
				//!num=200;
				//!cnt=100;
				public void showInfo(){
					System.out.println("The apple's seeds are "+num);
				}
			};
		}
原因:

所謂匿名內部類與實名類本質上是相同的,而在類的內部對子段初始化的位置只能是宣告的位置或者在建構函式的內部,而對欄位值的更改只能在該類方法的內部。在其它位置對欄位值的更改是無效的,因為此時的更改和操作沒有機會執行,所以編譯器會報錯。而在初始化塊中對欄位的操作和更改是可以的。

這樣也是不行的

	public class Wrapping{
		public int a;
		public int b;
		//!a=100;
	}