匿名内部类注意事项:
1、匿名内部类必须继承或者实现一个接口,虽然没有明显的写出,extends 和 implements,而且二者只能选择其一一种
(匿名内部类嘛,并没有所欲自己的名字,只有抽象父类或接口的 名字)(注意在这之前要存在那个父类或接口,不能程序自上而下执行的时候并不认识父类名或接口名)
2、匿名内部类中不能定义构造函数 (名字都没有怎么去写那个构造器函数,^ = ^)
3、匿名内部 类不能是抽象的(匿名内部类一个显著的特征就是,类与实例同时生成,有实例生成当然不能是 抽象的 了)
4、匿名内部类 不能存在静态成员变量和静态方法!,匿名内部类的内部方法中也不可以!!!注意这个有点区别(看下面的代码)
5、匿名内部类不能修改访问外部类的变量,但匿名内部类的内部方法中可以!(看下面的代码)
6、对于这里 “ public AnonyDemo anonyDemo(final int num) ”这个num在哪里都不能被修改,即使没有写 “final”
对于 4 5 6这三点可能表述的不是很清楚,具体看下面的代码!!!
总结匿名内部类的时候写的代码,已经经过测试!!
package BaseInnerClass;interface AnonyDemo{
public abstract void a();
}
public class AnonymousDemo {
private int number = 0; //在这种形式就是好比下面的这种形式,但是有不同,具体看下面
// private final int number = 0;
public void c(){
System.out.println("test.........");
}
public AnonyDemo anonyDemo(final int num){ //注意把这里写成final类型的不然后面容易出问题
return new AnonyDemo(){
// number = 10; 这个语句是error的,在匿名内部类的第一层里面不可以调用外围类的变量
int Number = number; //在这个地点只能 是读 变量而不能进行修改!!,上面的就是错的
// num += 10;
// int static k = 2; error 注意22行
// c(); error 注意20行!!!
public void a() {
c(); //right
// int static k = 2; error
System.out.println("I'm doing a test........");
// number = 10; 这个语句是right的,在内部的函数里面可以调用外围类的变量
System.out.println(number);
Number = 10;
System.out.println(Number);
// num += 10; error 不能 进行修改num的值,因为是final类型的 ,但是可以读
System.out.println(num);
}
};
}
public static void main(String[] args) {
AnonyDemo anony = new AnonymousDemo().anonyDemo(20);
anony.a();
}
}
有什么没有表述清楚的,或者有什么问题的欢迎各路大神前来斧正!!!