我来贴一个匿名类的例子吧,之作抛砖引玉。public class Parcel6 { public Contents cont() { return new Contents() {//***************** private int i = 11; public int value() { return i; } }; // ********************* } public static void main(String[] args) { Parcel6 p = new Parcel6(); Contents c = p.cont(); } } ///:)注意:“//****”之间的部分实际上就是个匿名类,实际生成一个这样的类 class MyContents implements Contents { private int i = 11; public int value() { return i; } } return new MyContents();
class A{
static class B{
}
}
这就是一个静态成员类,它的实例化可以用B b = A.B()
至于用途用法,你可以看看effective java或者其他的书成员类:
class A{
class B{
}
}
这就是成员类,它的实例化要先实例化A,在用A的实例加载class B,再实例化。局部类:
在方法类定义的类:
class A{
void doSOMETHING(){
class B{
}
}
只可以在方法里调用匿名类:
class A{
public A a;
a.doSOMETHING(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println("Exit when Closed event");
System.exit(0); //退出应用程序
}
public void windowActivated(WindowEvent e) {
setTitle("Test Frame " + counter++); // 改变窗口标题
}
} );doSOMETHING(Object o){
·····}
}
class A{
public A a;
public static void main(String [] args)
{a.doSOMETHING(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println("Exit when Closed event");
System.exit(0); //退出应用程序
}
public void windowActivated(WindowEvent e) {
setTitle("Test Frame " + counter++); // 改变窗口标题
}
} );}doSOMETHING(Object o){
·····}
}
public Contents cont() {
return new Contents() {//*****************
private int i = 11;
public int value() { return i; }
}; // *********************
}
public static void main(String[] args) {
Parcel6 p = new Parcel6();
Contents c = p.cont();
}
} ///:)注意:“//****”之间的部分实际上就是个匿名类,实际生成一个这样的类
class MyContents implements Contents {
private int i = 11;
public int value() { return i; }
}
return new MyContents();
有时用户仅仅为了在程序中定义一个对象而定义类,而且这个对象仅有的用途是将它作为参数直接传递给方法。在这种情况下,只要自己的类扩展现有类或实现接口,就可以选择将其定义为匿名类。这种匿名类的定义出现在语句的新表达式中,用户在其中创建和使用类的对象,所得不必提供类名。
例如:假定要定义一个类对象,它实现一次使用的ActionListener接口
pickButton.addActionListener(new ActionListener()
{
……
}
类的定义出现在为addActionListener()方法创建参数的新表达式中。这种方法要求一个ActionListener类型的引用,换句话说就是要求一个对于实现ActionListener接口的类的引用。
new 父类或接口名 { //类的定义
方法(){
}
}
就是说,它继承父类的其他方法,只重写其中某个方法。