Inheritance is constrained in one direction only, which means a readonly base cannot be subverted and a mutable base can still be tightened.
readonly class Money {}
readonly class Gbp extends Money {} // fine
class Loose extends Money {} // Fatal error
// and the other direction, which IS allowed
class Base { public int $x; }
readonly class Tight extends Base {}
// Fatal — a readonly class cannot extend a non-readonly one
// either. the rule is symmetric.
The symmetry is the surprise: a readonly class cannot extend a mutable one, because the parent’s properties would then be readonly and the parent’s own methods might write to them. That makes readonly a property of a whole hierarchy rather than of one class, which is a stronger commitment than the syntax suggests and is worth knowing before applying it to a base class.