I:匿名内部类声明:
1.new Xxxx() { /* class body. */ }
--where Xxxx is a class or interface name.
2.Xxxx anXxxx = new Xxxx () { /* class body. */ };
--Assign the reference to the constructed object into a variable.Notice that you must be sure to make a
complete statement, including the closing semicolon.
3.someMethod(new Xxxx () { /* class body. */ });
--you might use the reference to the constructed object as an argument to a method call.
II:内部类构造函数:
如果继承的类的构造函数有参数,则必须传递一个参数。
If the anonymous inner class extends another class, and that parent class has constructors that take
arguments, then you can arrange for one of these constructors to be invoked by specifying the argument list to
the construction of the anonymous inner class. An example follows:
// Assume this code appears in some method
Button b = new Button(“Anonymous Button “) {
// behavior for the button
};
// do things with the button b...
...
from http://blog.csdn.net/yakihappy/archive/2009/03/11/3979863.aspx
匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义。所谓的匿名就是该类连名字都没有 ,匿名内部类不可以有构造器 ,因为匿名内部类是要扩展或实现父类或接口 。匿名内部类可以继承其他类,因为是类就是继承自 Object 类的。
匿名内部类实现接口指的是类本身定义的时候
实现接口还是直接定义匿名内部类的时候
实现接口,前者肯定是可以的,后者应该是不行的,光从语法上都不能实现,如
class B {
class C
public void z()
Thread t=new Thread(new A(){//
这里定义了一个无名内部类,要实现接口,语法上都是不能实现
public void run() { }
});
}
class A extends B implements Runnable,Serializable,Cloneable
{ // 如果在new 以后写继承其他类或是实现接口都是错误
public void run(){ }
}
}
public class A {
int i = 1;
public A() {
Thread thread = new Thread() {//
匿名内部类
public void run() {
for(;;) {
A.this.run();/ / 用到了外部类的 run 函数,用外部类的类名加上 this 引用来说明要调用的是外部类的方法 run
try {
sleep(1000);
} catch(InterruptedException ie) {
}
}//for
}//run
};//Thread
thread.start();
} //A
()
public void run() {
System.out.println("i = " + i);
i++;
}
public static void main(String[] args) throws Exception {
new A();
}
}
本地内部类与匿名内部类的区别在于本地内部类有构造函数,而匿名内部类只能实例初始化。
匿名内部类:通常用在Java 的事件处理上
package inner; System.out.println(str); } |
在上面的例子中, 方法addMouseListener 接受一个对象型的参数表达式, 于是, 在参数里, 我们定义了一个匿名内部类, 这个类是一个MouseAdapter 类型的类 , 同时在这个类中定义了一个继承的方法 mousePressed, 整个类做为一个参数. 这个类没有名称 , 但是当执行这个 表达式 时它被自动实例化 .
内部类的继承问题
http://blog.csdn.net/java2000_net/archive/2008/09/30/2994149.aspx