Java 中的内部类和匿名类
作者:网络转载 发布时间:[ 2013/12/17 10:45:20 ] 推荐标签:
Java 中内部匿名类用的多的地方也许是在 Frame 中加入 Listner 了吧。
|
import java.awt.*;
import java.awt.event.*;
public class QFrame extends Frame {
public QFrame() {
this.setTitle("my application");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
this.setBounds(10,10,200,200);
}
}
|
内部匿名类,是建立一个内部的类,但没有给你命名,也是没有引用实例的变量。
|
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}
|
new 是建立一个 WindowAdapter 对象,后面一个 {} 表示这个括号中的操作作用于这个默认的对名象,而上面的 Java 程序中后面是一个函数体。
这个用法的作用是:创建一个对象的实例,并且 override 它的一个函数。
打开 WindowAdapter 的代码可以发现。它是一个抽象类。它是对 WindowListener 接口的一个实现。
Frame.addWindowListner(); 的参数是一个 WindowListner ,而实现上是传一个从WindowAdapter 派生出的一个匿名类。
有一点需要注意的是,匿名内部类由于没有名字,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数,并在实现的过程中使用 super 关键字调用相应的内容)。如果你想要初始化它的成员变量,有下面几种方法:
1. 如果是在一个方法的匿名内部类,可以利用这个方法传进你想要的参数,不过记住,这些参数必须被声明为 final 。
2. 将匿名内部类改造成有名字的局部内部类,这样它可以拥有构造函数了。
3. 在这个匿名内部类中使用初始化代码块。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

sales@spasvo.com