I\'m modeling a owner/ownee scheme on Swift:
class Owner {
// ...
}
protocol Ownee {
var owner: Owner { get }
}
What happens if Student is subclassed? The owner property remains Owner, but Student != StudentSubclass.
By making your Student class conform to the Ownee protocol, you must satisfy the contract of the protocol. The Ownee protocol states that Owner has type constraint, such that the Owner generic type is the type that's conforming to Ownee (Student, in this case).
If the compiler were to allow subclassing (i.e. by allowing you to not make Student final), then it would be possible for a StudentSubclass to exist. Such a subclass would inherit the Owner property, of type Owner, but Student is not the same as StudentSubclass. The Ownee protocol's contract has been breached, thus, such a subclass cannot be allowed to exist.