Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    10

    Accedere ai metodi di una sottoclasse da una superclasse?

    Salve gente. Sono un relativo neofita di Java, ed ho una domanda probabilmente stupida: in un programma d'esempio, ho creato una superclasse con una classe figlia. All'interno della classe figlia ho un metodo al quale mi interessa accedere; tuttavia, non riesco ad accedervi dalla classe padre, la cui invocazione mi ritorna un errore "Cannot find symbol". Tuttavia, ho notato che creando un metodo con lo stesso nome nella classe padre sono in grado di accedere al metodo che mi interessa all'interno della classe figlia, solo che io non voglio avere dei metodi ridondanti nella classe padre; come posso fare per accedere direttamente al metodo? Qua riporto il codice:

    codice:
    import java.awt.*;
    import java.awt.event.*;
    
    public class Albero extends java.applet.Applet {
        protected static Albero melo=new Melo();
        public static void main (String[] args)
        {
            pippo();
            melo.omino();
        }
        public static void pippo() {
            melo.StampaFrutto();
        }
        protected String frutto;
        public Albero() {
            frutto="generico";
        }
        protected void StampaFrutto() {
            System.out.println(frutto);
        }
    }
    la riga di codice incriminata è melo.omino(); e mi dà l'errore di cui sopra. La classe figlia:

    codice:
    public class Melo extends Albero
    {
        protected static String omino="Scimmia";
        protected static String frutto="mela";
        public static void main (String[] args)
        {
            omino();
        }
        static void omino() {
            System.out.println(omino);
        }
        protected void StampaFrutto() {
            System.out.println(frutto);
        }
    }
    Il metodo StampaFrutto è presente sia nella superclasse che nella sottoclasse, e funziona; chiamando internamente alla classe Melo il metodo Omino non ci sono errori, ma facendo la stessa cosa dalla superclasse sì. Qualcuno può darmi una mano a capire cosa sta succedendo? Grazie!

  2. #2
    nel primo pezzo di codice hai dichiarato melo di tipo Albero, di conseguenza quello che ottieni e' che puoi invocare i metodi dichiarati in Albero ma con l'implementazione di Melo.

    Dai una letta a cos'e' il polimorfismo: http://java.sun.com/docs/books/tutor...ymorphism.html
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    devi definirti gli stessi metodi sia nella classe padre che in quella figlia, cioè, sia nella classe padre che in quella figlia ci dev'essere un metodo con lo stesso nome e lo stesso numero/tipo di parametri. sta a te ridefinirti quel metodo nella classe figlia (tecnica dell'overriding)
    quando andrai ad invocare quel metodo dalla classe padre, la JVM cercherà il metodo in tutta la gerarchia partendo dalle classi più basse (tipo le foglie di un albero). se lo trova invoca quello, altrimenti sale.

    oltre a rivederti il polimorfismo, rivediti anche l'ereditarietà
    I miei esempi in Java qui: http://cdpjavaexamples.altervista.org/index.html

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    10
    Ahh, accidenti, che errore stupido a pensarci grazie a entrambi!

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.