What happens exactly is that you are creating an instance of the specific class, then you are upcasting the reference to the type of the interface.
The type of the reference defines what you can access in the instance. You can only use members of the class that the interface knows about.
The actual type of the object is still the type of the instance that you created, so you can downcast the reference to that type again:
SqlDataReader reader = (SqlDataReader)oSQLReader;