java--匿名类

匿名类的使用

 1 package Test;
 2 
 3 abstract class C525{
 4     abstract void foo();
 5 }
 6 
 7 class B525{
 8 //    局部类只能访问外包方法中的final成员。
 9 //    位于方法内部的局部类,可以访问局部类之外,外包方法之内的所以变量和方法,但是生命周期不同,延长生命周期的办法就是将变量设置为final类型。
10     int m = 21;
11     public C525 go(int x,final int y){
12         final int n = 12;
13         return new C525(){
14             public void foo(){
15                 System.out.println(y);
16                 System.out.println(n);
17                 System.out.println("m = "+m);
18             }
19         };
20     }
21     public void gogo(C525 c00){
22         c00.foo();
23     }
24 }
25 public class A525 {
26     public static void main(String[] args) {
27         C525 c525 = new B525().go(1, 2);
28         c525.foo();
29         
30         C525 c5252 = new B525().go(1, 20);
31         new B525().gogo(c5252);
32         
33         new B525().gogo(new C525(){
34             public void foo(){
35                 System.out.println("Hello....");
36             }
37             }//创建一个只有类体没有类名的类。
38         );
39         
40     }
41 }

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

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

【特点】

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

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

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

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

匿名类的应用

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

 

 1 package Test;
 2 
 3 import java.awt.Color;
 4 import java.awt.Frame;
 5 
 6 public class Wife extends Frame{
 7     public Wife(String str){
 8         super(str);
 9     }
10     public static void main(String[] args) {
11         Wife wife = new Wife("Stone");
12         wife.setSize(200,200);
13         wife.setBackground(Color.blue);
14         wife.setVisible(true);
15     }
16 }

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

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

 

 

 

posted @ 2013-10-10 15:52  平林新袖  阅读(355)  评论(0编辑  收藏  举报