匿名类的使用

 package Test;

 abstract class C525{
abstract void foo();
} class B525{
// 局部类只能访问外包方法中的final成员。
// 位于方法内部的局部类,可以访问局部类之外,外包方法之内的所以变量和方法,但是生命周期不同,延长生命周期的办法就是将变量设置为final类型。
int m = 21;
public C525 go(int x,final int y){
final int n = 12;
return new C525(){
public void foo(){
System.out.println(y);
System.out.println(n);
System.out.println("m = "+m);
}
};
}
public void gogo(C525 c00){
c00.foo();
}
}
public class A525 {
public static void main(String[] args) {
C525 c525 = new B525().go(1, 2);
c525.foo(); C525 c5252 = new B525().go(1, 20);
new B525().gogo(c5252); new B525().gogo(new C525(){
public void foo(){
System.out.println("Hello....");
}
}//创建一个只有类体没有类名的类。
); }
}

new B525().gogo(new C525(){
             public void foo(){
                 System.out.println("Hello....");
            }
             }//创建一个只有类体没有类名的类。
        );

程序中new C525(){}封装了一个类体,改写了foo()方法,这个就是匿名类。

【特点】

1)、它必须继承一个类或者实现一个接口,而不能显示的使用extends或者implements,没有父类。

2)、匿名类没有构造方法。通过new<父类名> 创建对象,匿名类定义与创建对象是同时进行的。

3)、匿名类只能一次性的创建,并有父类句柄持有。

4)、匿名类不需要初始化,只有默认的构造方法

匿名类的应用

  在图形用户界面(GUI)编程中,经常使用匿名类。比如使用Frame类 ---一个带有标题和缩放的窗口

 package Test;

 import java.awt.Color;
import java.awt.Frame; public class Wife extends Frame{
public Wife(String str){
super(str);
}
public static void main(String[] args) {
Wife wife = new Wife("Stone");
wife.setSize(200,200);
wife.setBackground(Color.blue);
wife.setVisible(true);
}
}

对于这一个窗口,可以进行移动,最大化、最小化。但是不能使用关闭窗口的叉,来关闭窗口。

其中,在JDK中有一个窗口适配器java.awt.event.WindowsAdapter专门管理这件事,它是一个抽象类,其windowClosing()方法用于关闭窗口,但这个方法体是空的。

05-07 15:55