getClass() возвращает объект типа Class<T>, по сути, этот объект представляет тип, который имеет какая либо сущность. Выполняется этот метод в
рантайме.
Проверка типов же осуществляется на этапе
компиляции.
Переменная a имеет тип A, поэтому для того, чтобы работать с этой переменной, как с объектом типа B вам нужно его явно привести к этому типу. Вы не сможете просто так без каста выполнить вызов a.testB() так как для компилятора этот объект имеет тип A (а в нем не существует метода с сигнатурой testB()).
Тем не менее, с помощью рефлексии вы можете вызвать метод динамически:
java.lang.reflect.Method method = a.getClass().getMethod("testB");
method.invoke(a);
Но в таком случае, вы лишаетесь проверки типов на этапе компиляции.