I find myself agreeing to return an interface instead of a concrete class.
The reason is simple, i want loose coupling.
But will there be other implication
The only reason to return concrete class could be if caller needs to be aware of this concrete implementation or, possibly, additional interfaces on concrete implementation. For example, in Android, you often have to use ArrayList because framework does not know how to properly serialize generic list interface.