Ni.
L'espressione for ( Object n : numbers ) usa l'iteratore di numbers,
ogni n dovra' essere un T di numbers, ovvero:
List<Number> numbers;
oppure
Number[] numbers;
ammettono sia:
for ( Object o : numbers )
che:
for ( Number o : numbers )
in entrambi i casi puoi inserire in numbers anche un oggetto che estenda
Number.
Mentre puoi sempre fare un cast ad un tipo ammesso che che l'istanza di
cui fai il cast estenda quel tipo.
Ad esempio:
for ( Object o : numbers ) {
Number n = (o istanceof Number)?(Number)o:null;
ma anche:
Number n = (o istanceof Integer)?(Integer)o:null;
oppure:
Integer n = (o istanceof Integer)?(Integer)o:null;
Viceversa l'istanza di qualsiasi classe puo' sempre essere assegnata ad
un Object, in virtu' del fatto che in Java la gerarchia di qualsiasi
oggetto discende da Object.