They might have wanted to remove a possible difference in semantics between the simple for and the enhanced for.
If you had, say, a regular for loop:
int i;
for (i=0; i<4; i++)
;
then if you let the loop execute normally, you get that i==4
after the loop, which is not valid for the iteration variable.
What then, if you could have:
int i;
for (i : myArray)
;
I suppose from an implementation standpoint, it would be easiest if at the end i
were equal to the last element in the array. But should it behave like that or should there be some invalid value, and if so, what could that be? What if you break out of the last iteration?
Another possibility is that it makes it more clear what that loop is about and what the element type of the collection is. By contrast, the simple for is a "legacy" construct in some sense, so they couldn't have applied a similar logic without "breaking" it or limiting its flexibility.
I'm obviously speculating, and it could turn out to have just been a random design choice.