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

    Sovrascrivere una variabile final

    ciao a tutti, ho il seguente quesito :

    voglio avere una classe astratta che implementa un semplice metodo getter che le sottoclassi possano utilizzare direttamente, senza sovrascrivere il metodo ma solo sovrascrivendo la variabile ritornata.

    codice:
    class A {
    protected static String ID = ""; 
    getClassID(){ return ID;}
    }
    In piu vorrei che la variabile fosse static e final.
    Quindi nella classe che eredita vorrei solo poter scrivere una riga come :

    codice:
    class B extends A {
    private final static ID = "subclass1"
    }
    ma ovviamente lanciando il metodo su un'istanza della sottoclasse mi ritorna la stringa vuota perche' legge il valore nella variabile della classe A. Avete in mente un modo per realizzare ci' che voglio (ovvero che ogni sottoclasse di A torni il proprio identificativo) senza sovrascrivere il metodo getID ogni volta ?

    grazie

  2. #2
    Un attributo final non può più essere ridefinito. Premesso ciò, potresti fare una cosa del genere:

    codice:
    class A {
        private String id;
    
        protected A(String id) {
            this.id = id;
        }
    
        protected String getClassId() {
            return id;
        }
    }
    
    class B extends A {
        public B() {
            super(un qualche valore di id);
            ...
        }
    
        public B(String id) {
            super(id);
            ...
        }
    
        ....
    }
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    scusa perché non fai l'override di getID()??
    E' fatto di proposito, in modo da consentire di ridefinire il comportamento nel caso di sottoclassi (che è quello che serve).
    Ovviamente non puoi fare queste ridefinizioni per classi/metodi dichiarati final

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.