java匿名内部类

来源:互联网 发布:mysql front 注释乱码 编辑:程序博客网 时间:2024/06/06 04:46

匿名内部类

所谓匿名内部类就是在类中需要实例化这个类的地方(通常在发法内),定义一个没有名称的类,其实例化方法为:



【例1

public class TestAnnoymity {

public static void main(String args[]){

Object obj = new Object(){

public int hashCode(){

return 2;

}

};

System.out.println(obj.hashCode());

}

}

程序输出:2

【例2

abstract class Annoymity {

abstract public void fun1();

}

public class Outer {

public static void main(String args[]){

new Outer().callInner(new Annoymity(){

public void fun1(){

System.out.println("匿名类测试");

}

});

}

public void callInner(Annoymity a){

a.fun1();

}

}

黑体部分如果用有名内部类编写的话,则应该为:

【例3

abstract class Annoymity {

abstract public void fun1();

}

public class Outer {

public void callInner(Annoymity a){

a.fun1();

}

public static void main(String args[]){

class inner extends Annoymity{

public void fun1(){

System.out.println("匿名类测试");

}

};

new Outer().callInner(new inner());

}

}

采用匿名内部类的方式产生对象十分简洁,但是对于例2不要将这种写法误以为抽象类可以实例化。同理,匿名内部类也可以实现一个接口,如下例4的黑体代码:

【例4

public class Outer {

public static void main(String args[]){

new Thread(new Runnable(){//产生实现Ruunable的匿名类对象

public void run(){

System.out.println("run");

}

}).start();

}

}

1.匿名内部类的使用规则

1)匿名内部类不能有构造方法,但是如果这个匿名内部类继承了一个只含有带参数构造方法的父类,在创建它的对象的时候,在括号中必须带上这些参数。

2)匿名内部类不能定义任何静态成员和方法。

3)匿名内部类不能被publicprotectedprivatestatic修饰。

4)只能创建匿名内部类的一个实例。

2.匿名内部类的使用条件

1)只用到类的一个实例。

2)类在定义后马上使用。

3)类非常小(Sun推荐是只有4行代码以下)。




原创粉丝点击