Conceitualmente tudo que for "static" pertence a "classe" e não ao "objeto", por isso, o que acontece no seu exemplo a cima é que a classe filha ao ser instanciada sempre chama o construtor da classe pai, fazendo o "total++" e guardando o resultado dessa operação na variável "total" da classe "Funcionario" e não da classe "Gerente", pois "Gerente" não herda o atributo estático "total", pois métodos e atributos estáticos não são orientados a objeto e assim não podem ser herdados.
Outro ponto a se ressaltar, é que na classe "Teste" quando você printa o "g1.total" o que acontece não tem nada haver com orientação a objeto, mas sim que a JVM visualiza toda a hierarquia da classe "Gerente" e identifica o atributo estático "total" na classe "Funcionario", esse processo faz parecer que usa herança de OO, mas na verdade é a JVM dando uma ajudada. O próprio eclipse reclama e deixa sublinhado de amarelo quando usamos atributos estáticos como se fossem heranças. Segues imagem abaixo:
Esse código abaixo compila, mas como podemos ver o eclipse avisa que tem algo estranho.
Quando corrigimos da maneira como o eclipse recomenda, fica da seguinte forma:
Como podemos observar na imagem a cima, o eclipse ao chamar o atributo estático "total" faz chamando o "Funcionario.total", mostrando que não existe atributo "total" na classe "Gerente", pois tudo o que for "static" pertence a classe, não sendo possível usar os conceitos de orientação a objeto como herança e sobrescrita.
Espero que agora tenha ficado mais claro!
Qualquer outra dúvida fico a disposição :)
Bons estudos!