Sure, but it’s up to the user to ensure that a compatible implementation is available at runtime. And generally people don’t compile against the interface. They compile with the implementation present.
Just as you get a runtime exception if you invoke a missing method, you could get a runtime exception for accessing uninitialized state.
Just as you get a runtime exception if you invoke a missing method, you could get a runtime exception for accessing uninitialized state.