Isto se chama polimorfismo, você criou a classe A e criou na classe a o método GO(), e na classe B (que estende de A) você sobrescreveu o comportamento do GO da classe A.
Isto é importante na orientação a objetos, visto que podemos ter objetos diferentes mas que com a mesma chamada é possível fazer coisas diferentes.
rmendes08
Bem, sendo mais preciso, isso se chama dynamic binding. Ou seja, a chamada de métodos é resolvida em tempo de execução, e o método chamado é aquele definido na CLASSE DO OBJETO, e não na classe da referência. Assim, mesmo que um objeto da sua classe B seja referenciado por uma variável de referência da classe A, ao chamar o método go() a JVM “sabe” que o objeto na heap é da classe B e invoca o método implementado na classe B. Caso não haja uma implementação na classe B, ele começa a subir na hierarquia de classes …