Exactly. Why have an Impl of just one type? If you truly want multiple implementations only then extract out a common interface, but don’t over specify. And even then, why call it Impl? You don’t see it in the JDK: InputStream, InputStreamImpl? Instead, you see InputStream and FileInputStream and ByteArrayInputStream and so on