Olá, Matheus!
Você está correto ao dizer que uma superclasse é uma "mãe" de onde as subclasses herdam atributos e métodos, e que uma interface é como um contrato que a classe que a implementa deve cumprir. No entanto, a escolha entre usar uma superclasse ou uma interface não é necessariamente uma questão de uma substituir a outra, mas sim de qual se encaixa melhor no design do seu programa.
Vamos pensar no seu exemplo de criar um método de classificação na superclasse que todas as subclasses teriam que implementar. Isso é totalmente possível, mas tem algumas implicações. Primeiro, isso significa que todas as subclasses da superclasse teriam que ter uma classificação. Se isso faz sentido para o seu programa, ótimo! No entanto, se houver subclasses que não deveriam ter uma classificação, então isso seria um problema. Além disso, se você quisesse adicionar a classificação a uma classe que não é uma subclasse da superclasse, você não poderia.
Agora, vamos pensar na interface. A interface permite que você adicione a classificação a qualquer classe que a implemente, não apenas às subclasses de uma superclasse específica. Isso oferece mais flexibilidade. Além disso, uma classe pode implementar várias interfaces, mas só pode herdar de uma superclasse. Então, se você quisesse adicionar mais comportamentos que não estão necessariamente relacionados (como classificação e, digamos, coloração), você poderia fazer isso com interfaces, mas não com uma superclasse.
Em resumo, a escolha entre usar uma superclasse ou uma interface depende do design do seu programa e do que você quer alcançar. Se um comportamento deve ser compartilhado por todas as subclasses de uma superclasse, então faz sentido colocar esse comportamento na superclasse. Se um comportamento deve ser compartilhado por classes que não têm uma superclasse comum, ou se uma classe precisa ter vários comportamentos que não estão necessariamente relacionados, então faz sentido usar uma ou mais interfaces.
Lembre-se, a orientação a objetos é uma ferramenta poderosa para organizar o seu código, mas a chave é usá-la de uma maneira que faça sentido para o seu problema.
Espero ter ajudado e bons estudos!