Buonsalve,
mi ritrovo con un comportamento del codice che non riesco a spiegarmi.
class Instrument{
public void play()
{
System.out.println("Play Instrument");
}
static void tune(Instrument i)//***
{
i.play();
}
}
public class Wind extends Instrument{
//OVERRIDE metodo() ereditato
public void play()
{
System.out.println("Play Wind");
}
//OVERLOAD metodo() statico ereditato
static void tune(Wind i) //**
{
i.play();
}
public static void main(String[] args)
{
Instrument flute2= new Wind();// UPCASTING
//**
Instrument.tune(flute2); //stampa "Play Wind"
//***
Instrument flute3=new Instrument();
Wind.tune(flute3);
Instrument.tune(flute3);
}
}
Ho un metodo statico (della ClassePadre) e questo metodo viene overloadato nella classe Figlio.
Ora, la classe Figlio eredita il riferimento della classe padre ( nomedellaClasse) .
Domanda: perché con quel riferimento della classePadre io sono in grado di invocare non solo il metodo della classePadre ma anche la sua versione overloadata nella classeFiglio?
DUBBIO: visto che quella versione overloadata , fondamentalmente "non ci sta" nella definizione della classe del Padre, ma è una esclusiva del Figlio
perchè (**)la posso comunque invocare col riferimento alla classePadre?
mi è chiaro che a quello ereditato (***) posso accedere con entrambi i riferimenti, perché tanto
-se accedo con quello del Padre —> sto accedendo ad un metodo della sua classe
- se accedo con quello del Figlio—-> sto accedendo ad un metodo ereditato
Ma non riesco a capire , perché col riferimento del Padre, dovrei essere in grado di invocare un metodo che seppur statico NON sta definito nella sua classe