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

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

trac 操作 num abs nal 部分 ets void name

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;
	}


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