Если объявлять одну и ту же переменную в цикле, то ошибок не возникает:
for(int i = 0; i < 2; i++) {
    Cat cat = new Cat();
}
Но если переменную объявить вне цикла, то при попытке повторного объявления возникает ошибка.
Cat cat = new Cat();
Cat cat = new Cat();
variable cat is already defined in method main(java.lang.String[])
Причина возникновения ошибки мне понятна, т.ч. вопрос такой: Почему при объявлении переменных с одинаковым именем внутри цикла не возникает ошибки?