Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Uso Funzione Padre con obj Figlio

    Ciao,
    se ho una classe del genere

    Codice PHP:
    public class Eredit{
        public static 
    void main (String args[]){
            
    Figlio luca = new Figlio("luca");
            
    Figlio nicola = new Figlio("nicola");
            
    nicola.parla("Luca""ciao");
            
    luca.parla("nicola""come va?");
            
    nicola.parla("luca""tutto bene");
        }
    }
    class 
    Padre{
        protected 
    String nome;
        public 
    Padre(String nome){
            
    this.nome nome;
        }
        public 
    void parla(String conString testo){
            
    System.out.println(this.nome+": egregio "+con+", "+testo);
        }
    }
    class 
    Figlio extends Padre{
        public 
    Figlio(String nome){
            
    super(nome);
        }
        public 
    void parla(String conString testo){
            
    System.out.println(this.nome+": we "+con+", cioè "+testo);
        }

    ovviamente vengono usati nel main i metodi dei figli.
    Come posso forzare l'uso nel main del metodo del padre?
    Ho provato di tutto:
    (Padre)nicola.parla
    nicola.Padre:arla
    ecc...
    ma non sembra andare... avete idee?
    (L'uso dell'implementazione del padre dev'essere un una tantum, cioè nn posso semplicemetne togliere l'override dalla funzione figlia...)

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Uso Funzione Padre con obj Figlio

    Originariamente inviato da magonicola
    ovviamente vengono usati nel main i metodi dei figli.
    Non ti sono chiare alcune cose molto importanti. Innanzitutto il concetto di override. Hai una classe B che estende la classe A, in B viene fatto l'override di un metodo della classe A. Se tu hai istanziato un oggetto della classe B, che tu usi un reference ad A o B, il metodo chiamato è sempre quello di B.

    In parole povere, nel caso dell'override, non si usa il tipo del reference per stabilire quale implementazione del metodo eseguire ma viene usato il tipo dell'oggetto reale per stabilire quale implementazione eseguire!!!

    Come seconda cosa c'è una questione concettuale che riguarda la ereditarietà. Hai fatto un esempio di ereditarietà che fa abbastanza rabbrividire: hai definito una classe Figlio che estende Padre. Quando usi l'ereditarietà, devi sempre farti una domanda: data una classe B che estende A, è vero che B è-un A???.
    Nel tuo caso specifico: un Figlio è-un Padre??? NO.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    http://www.mtbvulture.net

    A parte il fatto che se un figlio è un padre, il padre è nonno e nn ci vedo nulla di strano
    cmq lì potevo mettere benissimo animale e cane e la mia domanda non cambiava... non ne volevo fare una questione di forma

    CMQ... traduco quello che mi hai detto: se una classe derivata fa override di un metodo della classe padre, non è in alcun modo possibile chiamare la funzione della classe padre invocandola tramite l'oggetto della classe derivata.
    E' così o ho capito male?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: http://www.mtbvulture.net

    Originariamente inviato da magonicola
    cmq lì potevo mettere benissimo animale e cane e la mia domanda non cambiava
    Sì, però un cane è-un animale ha senso ed è corretto.

    Originariamente inviato da magonicola
    CMQ... traduco quello che mi hai detto: se una classe derivata fa override di un metodo della classe padre, non è in alcun modo possibile chiamare la funzione della classe padre invocandola tramite l'oggetto della classe derivata.
    E' così o ho capito male?
    È così. Se l'oggetto realmente istanziato è della classe derivata, allora il metodo chiamato è quello in override nella classe derivata.

    Se invece avessi una istanza della classe padre, allora il metodo chiamato sarebbe quello della classe padre. E verrebbe chiamato ancora il metodo della classe padre se la istanza fosse di una classe derivata che non fa l'override del metodo.

    L'unica cosa che si può fare nel metodo in override è al massimo usare la forma super.unmetodo() per chiamare il metodo nella superclasse (indipendentemente dall'eventuale override in classi derivate). Ma questo non ti serve.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.