博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
匿名内部类
阅读量:6455 次
发布时间:2019-06-23

本文共 1308 字,大约阅读时间需要 4 分钟。

匿名内部类是在抽象类及接口的概念之上发展起来的。主要目的就是减少类的定义,如下代码所示:
现在不使用匿名内部类完成:
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
类,对于代码没有太多的必要,所以此时就可以使用匿名内部类了:
interface A{
         public void print() ;
}
class C{
         public void fun(A a){
                   a.print() ;
         }
         public void fun(){
                   this.fun(new A(){
                            public void print(){
                                     System.out.println("Hello World!!!") ;
                            }
                   }
) ;
         }
};
public class Demo15{
         public static void main(String args[]){
                   new C().fun() ;
         }
};
       
如果现在方法中,有参数了,问匿名内部类是否可以访问呢?
interface A{
         public void print() ;
}
class C{
         public void fun(A a){
                   a.print() ;
         }
         public void fun(int i){
                   this.fun(new A(){
                            public void print(){
                                     System.out.println("Hello World!!! i = " + i) ;
                            }
                   }) ;
         }
};
public class Demo17{
         public static void main(String args[]){
                   new C().fun(10) ;
         }
};
       
编译时会出现以下的错误:
Demo17.java:11: 
从内部类中访问局部变量
 i
;需要被声明为最终类型
                                System.out.println("Hello World!!! i = " + i) ;
                                                                           ^
错误
       
如果要想从方法中定义的内部类,访问方法中的参数,则方法参数的声明处必须加“final
”。
       public void fun(final int i) ;  
注意:
final
表示的不是常量,只是一个标记而已。
本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/96927,如需转载请自行联系原作者
你可能感兴趣的文章
无缝滚动实现原理分析【公告栏】
查看>>
Java Web 高性能开发
查看>>
redis-cli 命令总结
查看>>
CentOS 4.4双网卡绑定,实现负载均衡
查看>>
Scala之柯里化和隐式转换
查看>>
获取androdmanifest里面的meta-data
查看>>
mysql拷贝表的几种方式
查看>>
用设计模式去掉没必要的状态变量 —— 状态模式
查看>>
linux安装elasticsearch及遇到的各种问题
查看>>
健忘的正则
查看>>
[转]CMake快速入门教程:实战
查看>>
IntelliJ IDEA创建JavaWeb工程及配置Tomcat部署
查看>>
Markdown用法
查看>>
求最大值及其下标
查看>>
Request header is too large
查看>>
轮播插件swiper.js?
查看>>
网路流24题总结
查看>>
15 个 Android 通用流行框架大全
查看>>
ant 执行java文件,java文件中含中文,显示乱码
查看>>
IE8兼容@media和mp4视频的解决方案
查看>>