查阅大量资料之后的“匿名内部类”总结

匿名内部类注意事项:

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

有什么没有表述清楚的,或者有什么问题的欢迎各路大神前来斧正!!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值