Java 类实例,并在方法参数内重写

Java 类实例,并在方法参数内重写,java,class,anonymous-inner-class,Java,Class,Anonymous Inner Class,有谁能帮我理解这个java代码块吗 String [] files= file.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { // TODO Auto-generated method stub return true; } }); 这只是一个例子,我需要理解在方法参数中

有谁能帮我理解这个java代码块吗

String [] files= file.list(new FilenameFilter() {
    @Override           
    public boolean accept(File dir, String name) {
        // TODO Auto-generated method stub
        return true;            
    }
});
这只是一个例子,我需要理解在方法参数中包含override方法的新实例的概念


我理解这段代码的作用,但我需要理解它的概念*

这叫做匿名内部类


在java中,没有名称的类称为匿名内部类。如果必须重写类或接口的方法,则应使用它。

这称为匿名内部类

在java中,没有名称的类称为匿名内部类。如果必须重写类或接口的方法,则应使用它。

请查看
File.list(FilenameFilter filter)

它以一个参数作为参数,而该参数又具有方法

boolean接受(文件目录,字符串名称)

您想将一个新的
FilenameFilter
传递给该方法,方法是将其作为一个传入,并重写匿名类中的
accept
方法。

查看
文件的列表(FilenameFilter过滤器)

它以一个参数作为参数,而该参数又具有方法

boolean接受(文件目录,字符串名称)


您想将一个新的
FilenameFilter
传递给该方法,方法是将它作为一个参数传入并重写匿名类中的
accept
方法。

假设您有一个带有接口或抽象类作为参数的方法。如果调用此方法,则必须传递指定类型的具体实例。一种可能性是,在参数内创建一个实例。这称为匿名类


只有当您只需要这个类一次时,才应该这样做。

假设您有一个带有接口或抽象类作为参数的方法。如果调用此方法,则必须传递指定类型的具体实例。一种可能性是,在参数内创建一个实例。这称为匿名类


只有当您只需要这个类一次时才应该这样做。

如果您在java.io.File中签入list()的实际实现,它看起来是这样的

    public String[] list(FilenameFilter filter) {
    String names[] = list();
    if ((names == null) || (filter == null)) {
        return names;
    }
    List<String> v = new ArrayList<>();
    for (int i = 0 ; i < names.length ; i++) {
        if (filter.accept(this, names[i])) {
            v.add(names[i]);
        }
    }
    return v.toArray(new String[v.size()]);
}
public String[]列表(FilenameFilter过滤器){
字符串名称[]=list();
if((name==null)| |(filter==null)){
返回姓名;
}
列表v=新的ArrayList();
for(int i=0;i

该方法需要实现FilenameFilter的任何实例。它在File.list()方法中所做的是调用过滤器参数的accept()。它实际执行调用方的原始实现。这意味着您在本例中提供的被重写的方法内容。

如果您在java.io.File中签入list()的实际实现,它看起来是这样的

    public String[] list(FilenameFilter filter) {
    String names[] = list();
    if ((names == null) || (filter == null)) {
        return names;
    }
    List<String> v = new ArrayList<>();
    for (int i = 0 ; i < names.length ; i++) {
        if (filter.accept(this, names[i])) {
            v.add(names[i]);
        }
    }
    return v.toArray(new String[v.size()]);
}
public String[]列表(FilenameFilter过滤器){
字符串名称[]=list();
if((name==null)| |(filter==null)){
返回姓名;
}
列表v=新的ArrayList();
for(int i=0;i

该方法需要实现FilenameFilter的任何实例。它在File.list()方法中所做的是调用过滤器参数的accept()。它实际执行调用方的原始实现。因此,这意味着您在本例中提供的重写方法内容。

它正在创建一个实现
FilenameFilter
接口我认为您应该阅读它正在创建一个实现
FilenameFilter
接口我认为您应该阅读它只是一个匿名类。不是内部阶级。内部类和匿名类是不同的。当然,你可以同时拥有两个类,但据我们所知,这里不是这样的,它只是一个匿名类。不是内部阶级。内部类和匿名类是不同的。当然,你可以同时上两门课,但据我们所知,这里的情况并非如此。