I recently started working with a shiny new version of a codebase that uses interfaces all over for... basically everything. I think all of our concrete classes implement interfaces.
The problem I've noticed is that the project doesn't appear to code to the interface! Items passed using interfaces are consistently casted to specific types. This feels like a bad idea but I can't seem to articulate clearly why this is wrong. It seems like using interfaces only to cast regularly is losing the benefits of both interfaces and a strongly-typed language in the first place.
To rephrase as a question: Is this a good practice? Why?
Edit: This is not a duplicate of What is the point of having every service class have an interface? as my question relates specifically to casting from an interface to a dozen or more concrete classes that implements that interface.