Java匿名内部类详解

匿名内部类,顾名思义,就是没有名字的类,匿名内部类格式如下:

new name(parameter)
{
   ......
}

name父类或是接口的名字。

parameter:若name为父类,则parameter为父类构造函数的参数。


匿名内部类具有一系列的限制:

1、不能具有static成员域和成员函数和类。

2、不能具有static final 修饰的引用类型。

3、不能有自定义的构造函数。

4、不能具有静态代码块。

5、匿名内部类不能有类修饰符


使用匿名内部类的方式:

class A
{   
    int clsvalue;
    A(int v)
    {
        clsvalue=v;
    }
}
interface B
{
    int invalue=0;
}
public class Try {
    public static void main(String[] args) {
        /*方法一:利用父类或接口的引用指向匿名内部类,此时引用只能访问父类或是接口中的成员域和成员函数,
          例如下面的a和b只能访问clsvalue和invalue,无法访问x和y。但可以使用被覆盖的方法。
        */
        A a= new A(1)
        {
           static final int x=0;  
        };
        B b=new B()
        {
           static final int y=0;
        };
        
        
        /*方法二:直接通过下列代码访问,此时可以访问父类或接口、匿名内部类中定义的成员域或是成员方法。但只能使用一次(由于没有变量名)*/
        new A(2){static final int y=0;};
    }
}

匿名内部类仅仅是局部有效的,方法一仅在作用域内有效,方法二仅在当行代码中有效。

接下来我们编译如下代码:

class A
{   
    int clsvalue;
    A(int v)
    {
        clsvalue=v;
    }
}
public class Try {
    public static void main(String[] args) {
        A a= new A(1){ };
    }
}
南国旧梦i

南国旧梦i

出生于苏北小镇 习惯了一个人坐在电脑前 喜欢一个人听着音乐 梦想着一天有一趟说走就走的旅行·······目前过着大学生活,开始了程序人生。

2 Comments

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>