obj.next() retorna o próximo Object da lista.
Como todo autor é um Object, e na lista, apenas está cadastrado autores, você diz ao java.
"Ei cara, o object que estava na lista é um autor. Eu, programador e todo poderoso, assim o afirmo."
Se a lista não for de autores, você receberá um ClassCastException. É a doce maneira do Java de dizer:
"Desculpe, mas não era bem assim... aquele object da lista não era um autor".
Após o cast, você pode usar os métodos de autor normalmente.
while(obj.hasNext()){
//Aqui Você não transforma nada. Todo autor é um object.
//Você só diz que esse Object em especial é mesmo um autor.
Autores aut = (Autores)obj.next();
System.out.println(out.getNome()); //Pega o nome do autor
}
O tipo do objeto é definido na criação dele, no momento do new. E não em como vc referencia.
Object x = new Autor();
if (x instanceof Autor) //True. A variável x referencia objects, mas o objeto referenciado é um autor
Note que na lingua portuguesa ocorre a mesma coisa. Eu tenho uma pincher. Não é porque eu falo para você "O cachorro lá de casa é esperto", que minha pincher deixou de ser uma pincher e passou a ser um "Cachorro genérico". Eu só "referenciei" a minha pincher através da palavra "Cachorro", pois todo pincher é um cachorro e, portanto, a classe Picher seria uma filha da classe Cachorro. Por isso a relação de herança é chamada "relação é um".
Essa é a característica da abstração. Um sistema com abstração é possível pois as linguagens OO permitem o polimorfismo.