A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 薆情媬証書 于 2013-10-16 22:25 编辑

先看下代码

  1. <p>File dir = new File("d:\\java");
  2. String[] arr = dir.list(new FilenameFilter()
  3. {
  4. public boolean accept(File dir, String name)
  5. {
  6.   return false;
  7. }
  8. }); </p>
复制代码
该段代码中,第二句代码的含义??
还有FilenameFilter不是抽象类吗,抽象类不是不能有对象吗,怎么用了new呢?

还有,最好能写出该内部类不简写的原码。
先谢过!

评分

参与人数 1技术分 +1 收起 理由
李江 + 1

查看全部评分

4 个回复

倒序浏览
第二句表示该方法接受一个FilenameFilter类型的参数,FilenameFilter是个接口,楼主真应该好好看看匿名内部类了,上面的代码等同于
  1. File dir = new File("d:\\java");
  2.         String[] arr = dir.list(new MyFilenameFilter());
  3.        
  4.         class MyFilenameFilter implements FilenameFilter
  5.         {
  6.                 public boolean accept(File dir, String name)
  7.                 {
  8.                         return false;
  9.                 }
  10.         }
复制代码

点评

如果是抽象方法,能这样吗?  发表于 2013-10-16 22:28

评分

参与人数 1技术分 +1 收起 理由
李江 + 1

查看全部评分

回复 使用道具 举报
这个应该叫匿名内部类的问题。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
源码如下:
String[] arr = dir.list(子类对象);
class 子类 extends 父类 (或者implements 接口)

覆盖父类或者接口中的方法;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
匿名内部类从名字上就知道子类是没有名字的,所以用父类或者接口名实例化,就是:
new 父类名或者接口名(){复写父类或者接口中的方法}
String[] arr = dir.list(new FilenameFilter(){public boolean accept(File dir, String name){return false;}});
为了阶梯层次阅读性,分行之后:
String[] arr = dir.list(new FilenameFilter()
{
        public boolean accept(File dir, String name)
         {
          return false;
          }
});

评分

参与人数 1技术分 +1 收起 理由
李江 + 1

查看全部评分

回复 使用道具 举报
问题解决后把帖子状态改为提问结束...谢谢楼楼了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马