Por que as principais linguagens OOP estáticas fortes impedem a herança de primitivas?

Por que isso está correto e principalmente esperado: abstract type Shape { abstract number Area(); } concrete type Triangle : Shape { concrete number Area() { //... } } ... enquanto isso não está bom e ninguém reclama: concrete type Name : string { } concrete type Index :...