Oi Alexandre,
A partir do momento em que você escreve um construtor na classe mãe o construtor padrão (default) deixa de existir.
Logo, quando você escreve a classe filha sem um construtor, o construtor padrão é chamado implicitamente por debaixo dos panos.
E temos que ter um construtor na classe filha que realmente invoque algum construtor existente na classe mãe.
Exemplo 1 (funciona):
Funcionario.java:
public abstract class Funcionario {
public Funcionario(String nome) {
System.out.println("teste");
}
}
Gerente.java:
public class Gerente extends Funcionario {
public Gerente() {
super("Gabriel");
}
}
Note que para instanciar um gerente temos que conseguir criar um Funcionario através de um construtor.
Se você tirar o super("Gabriel") do construtor gerente, como o construtor default do Funcionario não existe mais, vai dar erro pois não se consegue instanciar um Funcionario, ou seja, não é possível encontrar um construtor em Funcionario que instancie um objeto do tipo Funcionario que não tenha nome. Obrigando o programador a garantir a persistência.
Note que se você adicionar outro construtor em Funcionario:
public Funcionario(){
}
A classe Gerente vai funcionar sem o super. Pois existe um construtor em Funcionario capaz de instanciar um objeto do tipo Funcionario sem um nome.
Espero ter ajudado.
Bons estudos.