匿名内部类

使用场景:

1.所用的类只需要使用一次

2.需要访问某个类的protected ***方法,但该类与当前类不在同一个包中。可以使用匿名内部类继承那个类,然后定义一个方法,在该方法中调用super.***(),从而实现目的。

3.Thread, runnable经常可以通过匿名内部类的方式使用

Thread td = new Thread() {

   public run() {

           // TODO

  }

}.start().

new Thread (new Runnable() {

             @Override

             public run() {

                       //TODO

              }

}).start().

使用方式:

new 父类构造器(参数列表)|实现接口()

{

     //匿名内部类的类体部分

}

使用说明:

1、必须继承一个父类或者实现一个接口

2、只能继承一个父类或者实现一个接口

3、没有class关键字,因为匿名内部类是通过new生成一个对象的引用,这个引用是隐式的。

4、没有构造函数,初始化通过构造代码块完成

5、不能存在任何静态成员变量和静态成员方法

6、不能是抽象的,必须实现父类或接口里的所有抽象方法

匿名内部类使用外部参数时,该外部参数必须要定义为final类型。因为匿名内部类在使用该外部参数时,并不是直5接使用,而是通过自已的构造函数,将外部参数拷贝到匿名内部类的成员变量(或者说属性?)中,然后使用的是该成员变量(属性?)。如果外部参数发生变化,对于匿名内部类来说是不可知的,所以强制其为常量保持内外一致性。

你可能感兴趣的:(匿名内部类)