Acho que a herança merece propósitos melhores:
- Se a única coisa que varia entre subclasses e entre subclasses e sua superclasse são os valores de alguns membros, então você está abusando de herança ou usando errado. Você pode usar o padrão de construtor para criar mísseis com valores diferentes. Se o padrão do construtor for muito complexo para a tarefa, métodos de fábrica como
buildMissileOfTypeA()
ebuildSuperMassiveMissile()
servirão. - Você estaria colocando a herança em bom uso se os métodos abstratos estivessem relacionados a comportamentos que as subclasses implementariam de maneiras potencialmente diferentes, mas não apenas para definir um valor de um membro.
- Além disso, você não está realmente forçando as subclasses a definir seu próprio valor, elas simplesmente podem implementar um método vazio que não altera o valor da massa e o compilador ficará satisfeito com isso.