您的位置:首页 > 编程语言 > Java开发

java匿名内部类

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



【例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)匿名内部类不能被public、protected、private、static修饰。

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

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

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

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

(3)类非常小(Sun推荐是只有4行代码以下)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 匿名内部类