By implementing the full interface instead of extending the EmptyVisitor, future additions to the interface can be discovered at runtime instead of being ignored.