Giuso ha scritto:
Quindi se io volessi eseguire void prova(int) di B, dovrei per forza creare un oggetto in B?
Sì e, nota, tenendo un reference (variabile) di tipo
B. Se assegni un oggetto B ad una variabile del supertipo (A) il metodo "nuovo" prova(int) NON lo "vedi" da un reference A !!
Giuso ha scritto:
l'overloading quindi mi sembra di aver capito che può essere fatto solo nella stessa classe in cui ho i 2 metodi "diversi"?
No, l'overloading tra 2 metodi può avvenire nella stessa classe o tra una classe e la superclasse. Non è quello il punto.
La questione è la "scelta" del metodo. Perché l'
overloading viene risolto in fase di COMPILAZIONE, basandosi su ciò che il compilatore "sa" solo di un certo tipo (e sul tipo "statico" degli argomenti al metodo). Mentre l'
overriding viene risolto a RUNTIME basandosi sull'oggetto realmente istanziato.