匿名内部类是在抽象类及接口的概念之上发展起来的。主要目的就是减少类的定义,如下代码所示:
现在不使用匿名内部类完成:
interface A{
public void print() ;
}
class B implements A{
public void print(){
System.out.println("Hello World!!!") ;
}
};
class C{
public void fun(A a){
a.print() ;
public void fun(){
this.fun(new B()) ;
public class Demo15{
public static void main(String args[]){
new C().fun() ;
但是现在假设说B类只使用一次,那问是否还有必要进行单独的声明呢?则会发现如果声明了B类,对于代码没有太多的必要,所以此时就可以使用匿名内部类了:
this.fun(<b>new A(){</b>
<b> public void print(){</b>
<b> System.out.println("Hello World!!!") ;</b>
<b> }</b>
<b> }</b>) ;
如果现在方法中,有参数了,问匿名内部类是否可以访问呢?
public void fun(<b>int i</b>){
this.fun(new A(){
public void print(){
System.out.println("Hello World!!! i = " + i) ;
}
}) ;
public class Demo17{
new C().fun(10) ;
编译时会出现以下的错误:
Demo17.java:11: 从内部类中访问局部变量 i;需要被声明为最终类型
System.out.println("Hello World!!! i = " + i) ;
^
1 错误
如果要想从方法中定义的内部类,访问方法中的参数,则方法参数的声明处必须加“final”。
public void fun(final int i) ;
<b>注意:</b>
此final表示的不是常量,只是一个标记而已。
本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/96927,如需转载请自行联系原作者