Richiesta di aiuto per risolvere un esercizio

di il
27 risposte

27 Risposte - Pagina 2

  • Re: Richiesta di aiuto per risolvere un esercizio

    FabioJ ha scritto:


    Comunque una risposta ad intuito e non a caso la do.

    A.prova(Object)
    Sì, esatto.

    In:
    Object o = new Double(12);
    a.prova(o);

    Al compilatore NON importa cosa viene assegnato alla variabile o. In questo caso noi lo sappiamo che viene sempre istanziato un Double. Ma in generale il "flusso" di esecuzione di un codice potrebbe essere complesso, la scelta del tipo da istanziare potrebbe dipendere da altre variabili o l'oggetto da passare a prova potrebbe arrivare a sua volta da un parametro. Insomma, il compilatore NON "sa" e non usa questa informazione per la risoluzione del overloading.

    Per il compilatore il tipo "statico" dell'argomento è quello della VARIABILE. La variabile è di tipo Object, quindi questo è il tipo dell'argomento usato per scegliere la signature (la firma del metodo) da invocare.
    Ora: in A esiste/esistono metodi che sono in grado di ricevere un Object? Sì, esiste solo il prova(Object), questo è l'UNICO applicabile. E quindi è quello invocato. Stop, tutto qui.
  • Re: Richiesta di aiuto per risolvere un esercizio

    Grazie per le preziose informazioni devo comunque riguardare con calma.
    Spero di capirle bene svolgendo degli esercizi e seguire le lezioni.
  • Re: Richiesta di aiuto per risolvere un esercizio

    FabioJ ha scritto:


    Grazie per le preziose informazioni devo comunque riguardare con calma.
    Spero di capirle bene svolgendo degli esercizi e seguire le lezioni.
    Ok. Sempre con quelle classi A/B mostrate, finora i due scenari erano solo su overload.

    Ora:
    A a = new B();
    Integer i = new Integer(123);
    a.prova(i);
    C'è anche override e qui viene il bello.
    Prova a valutare questo scenario. Se non riuscirai a dire cosa succede esattamente, non preoccuparti, fa parte del percorso di studio.
  • Re: Richiesta di aiuto per risolvere un esercizio

    Se non ricordo male override significa (Ridefinizione) = attributi della superclasse possono essere ridefiniti nella sottoclasse.
    Mi sembra che si scrive nel programma @Override

    Devo pensarci un po' a questo nuovo quesito.
  • Re: Richiesta di aiuto per risolvere un esercizio

    L'override e' strettamente legato all'ereditarietà...'
  • Re: Richiesta di aiuto per risolvere un esercizio

    FabioJ ha scritto:


    Se non ricordo male override significa (Ridefinizione) = attributi della superclasse possono essere ridefiniti nella sottoclasse.
    L'override si applica solo ai metodi "di istanza". Non si applica ai metodi statici "di classe" (qui si parlerebbe di "hiding" invece) e nemmeno ai campi (di qualunque tipo).

    FabioJ ha scritto:


    Mi sembra che si scrive nel programma @Override
    L'annotazione @Override è solo un "pro-forma" per avere un check in più in compilazione. Se c'è l'annotazione in un metodo e qualcuno cambia es. la super-classe in modo tale che quel metodo non fa più davvero un override, allora c'è un errore in compilazione di quel metodo. Tutto qui.

    Ma di per sé non cambia o impone null'altro sul principio in sé di override.
  • Re: Richiesta di aiuto per risolvere un esercizio

    Con l'extends si ereditano i metodi della classe A .
    Praticamente con override si riscrive il metodo
    comunque secondo me la risposta e'

    B.prova(Integer)

    Sempre ad intuito .
  • Re: Richiesta di aiuto per risolvere un esercizio

    FabioJ ha scritto:


    Con l'extends si ereditano i metodi della classe A .
    Sì, quelli "ereditabili" chiaramente (es. NON i private di certo).
    In questo contesto, "ereditare" è più una questione di "accessibilità".

    FabioJ ha scritto:


    comunque secondo me la risposta e'

    A.prova(Long)

    Sempre ad intuito .
    No, sbagliato.
  • Re: Richiesta di aiuto per risolvere un esercizio

    Credo sia una riscrittura e per questo e' :

    B.prova(integer)
  • Re: Richiesta di aiuto per risolvere un esercizio

    FabioJ ha scritto:


    Credo sia una riscrittura e per questo e' :

    B.prova(integer)
    No, neanche.
  • Re: Richiesta di aiuto per risolvere un esercizio

    Va bene , allora se non e' zuppa e' pan bagnato pero' il concetto non mi e' molto chiaro.

    B.prova(Number)"
  • Re: Richiesta di aiuto per risolvere un esercizio

    FabioJ ha scritto:


    Va bene , allora se non e' zuppa e' pan bagnato pero' il concetto non mi e' molto chiaro.

    B.prova(Number)"
    Sì è questo! Ma va capito il concetto. Pensaci, se non riesci, lo spiego.
  • Re: Richiesta di aiuto per risolvere un esercizio

    Va bene.
Devi accedere o registrarti per scrivere nel forum
27 risposte