String[] args这个数组就是存放命令行参数的list=path.list(new DirFilter(args[0])) 而调用accept则是list方法里面定义的~~~~

解决方案 »

  1.   

    我怎么也搞不懂?在前一个文件里,怎么会调用accept()呢?
    他只是引入了Dirfilter的new (Dirfilter(args[0]))也没明确说引用accept()方法啊?
      

  2.   

    To:CyberH
     "而调用accept则是list方法里面定义的~~~~"
    能否说详细点儿,就是这里不明白,先谢了!
      

  3.   

    下面是JDK里面File.list的源码,FilenameFilter被定义成接口~~~    public String[] list(FilenameFilter filter) {
    String names[] = list();
    if ((names == null) || (filter == null)) {
        return names;
    }
    ArrayList v = new ArrayList();
    for (int i = 0 ; i < names.length ; i++) {
        if (filter.accept(this, names[i])) {
    v.add(names[i]);
        }
    }
    return (String[])(v.toArray(new String[0]));
        }
      

  4.   

    在你的DirFilter 类中实现了FilenameFilter接口,这个接口包括accept方法.
    也就可以看成是DirFilter 是FilenameFilter类的子类,当程序中path.list(new DirFilter(args[0]))时,可看成是把一个FilenameFilter类的传进去,在list中调用了FilenameFilter的accept方法,实际上是回调了DirFilter 的accept的方法,也就是面向对象中所谓的多态性
      

  5.   

    你实现FilenameFilter这个过滤文件的接口,你必须覆盖函数accept(),只有这样你才能过滤其它扩展名的文件,而显示你想要的扩展名文件。只要你实现了这个接口,同时添加与list=path.list(new DirFilter(args[0]));相类似的代码,这个accept函数就执行。这是系统本身默认调用的啊!