我正在扩展一个类以及实现一个接口,它们都包含一个名为doFilter的方法,这是我的超类中的最终方法,而从我的接口中是一个抽象方法。所以,现在我得到了编译器错误。

我该如何解决。

我的过滤器类是:

public class MyCacheFilter extends CachingFilter implements Filter {
    // here is error, as compiler is thinking I am overriding dofilter of
    // CacheFilter, although I have not specified any @Override annotation

    public doFilter() {
    }
}

最佳答案

如果该方法由CachingFilter提供,则不必在MyCacheFilter中提供实现。 (实际上,正如您所发现的,您不能。)

如果您确实希望doFilter的行为与CachingFilter提供的行为不同,则不能选择继承。在这种情况下,请考虑使用组合:

public class MyCacheFilter implements Filter {

    CachingFilter cachingFilter = ...

    @Override
    public void doFilter() {
        ...
        possibly refer to cachingFilter...
        ...
    }

    public String otherMethod() {
        // delegate to cachingFilter
        return cachingFilter.otherMethod();
    }
}



  [...]尽管我没有指定任何@Override注解


无论您是否明确提供@Override都没有关系。

10-01 00:32