Patch looks good... I'm going to apply it and review one last time. Thanks Luca!
Just to try to explain my reasoning again for the abstract class: in general to me if its the class's "primary purpose" then its the correct way from an inheritance perspective. Whereas interfaces (e.g. Closeable) are not. This way we get the possibility of incorporating default behavior and things like this.
One reason why this could be useful, when we look at issues like
LUCENE-4906, we might want to make formatter more powerful to do this: maybe it has a lower-level method that e.g. gets docids and all kinds of other things, or even all the passages for all the top-docs. The default implementation could still call format() for each doc, but that would allow someone to e.g. build a complex response structure for the whole top-docs at once or something like that.
I'm not arguing that would necessarily be a good API at all, its just a theoretical example that wouldnt work well with interfaces