A protocol usually defines signature for various members in its primary definition. Sometimes, an extension defines a default implementation for a primarily-defined member. Your type has to define any primary members that don't have any implementation. If a primary member does have an implementation, but you define one in your type anyway, your version will always be called instead, right?
But what about protocol extension methods that originate in said extension. Those method definitions are fixed, right? You cannot override them; any version you add would be an overload and only called when using an object that is referenced with the final type. (Or is that an error instead?) If the object is referenced with the protocol as the type, the extension's original version is always called, right?
You can shadow, but not overload, a protocol extension method. Like all other shadowing, this means that the concrete method is called when you are writing concrete code, but the shadowed method is called via generic functions (or after casting to the protocol existential).