import java.io.*;
class filenameFilter implements FilenameFilter{
private String p="";
public filenameFilter(String s)
{
p=s;
}
public boolean accept(File dir,String name)
{
return name.startsWith(p);
}

public class filter {
        

public static void main(String[] args) {
File dir=new File("c:/");
        String[]s=dir.list(new filenameFilter("t"));
        for(int i=0;i<s.length;i++)
        {
         System.out.println(s[i]);
        }
}}
为什么我只用newfilenameFilter就可以调用过滤函数accept,accept不是构造方法,怎么执行了,我认为在new之后还应该调用
accept才能实现过滤,大家说说看

解决方案 »

  1.   

        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[v.size()]));
        } 这时jdk中 File类的list(FilenameFilter filter)的实现代码,list方法中调用了accept方法
      

  2.   

    你覆盖了 dynamic binding
      

  3.   

    可以写个构造器调用,也可以写匿名类调用。
    在String[]s=dir.list(new filenameFilter("t"));中,传进去的就是一个实例。
    用匿名类,传进去的也是一个实例。
    都是构造完的