Can extension-original members of a protocol be overridden?

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?

Correct.

Almost always. :-)

The exception, which many people regard as a bug, involves subclasses and is discussed in this thread. A minimal example:

protocol Fooable { func foo() }
extension Fooable { func foo() { print("Default foo") } }
class A: Fooable {}
class B: A { func foo() { print("B-specific foo") } }
let b: Fooable = B()
b.foo()     // "Default foo"

In brief, when a class conforms to a protocol by using a default implementation, its subclasses cannot override that method.

Correct. Protocol extension methods implement algorithms based on the protocol requirements, and are statically dispatched.

Yeah, that looks like a bug. But if A also defined an implementation of foo, then B's version of the override would have been called in your example?

Correct. Protocol extension methods implement algorithms based on the protocol requirements, and are statically dispatched.

So a type-level overload is never called? Even when through a reference to the type (instead of through the protocol)?

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).