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()方法用于关闭窗口,但这个方法体是空的。

 

 

 

你可能感兴趣的:(java)