It’s just one of two possible approaches. For example, in C# you can derive from superclass and there’s no need to mark it anyhow. You can – on the other hand – mark class as sealed (equivalent to final in apex, which is default) to prevent inheritance.