Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2017
    Messaggi
    6

    Dichiarazioni variabili final

    Salve a tutti,
    sono agli inizi con Java,vengo da Python e C ed � la prima volta che mi cimento in una programmazione orientata agli oggetti anche se ho gi� trattato le strutture in C.
    Forse sar� che non mi � stato spiegato molto bene questo linguaggio ma di fatto mi trovo in difficolt� nel muovermi tra dichiarazioni di variabili di tipo static, protected,final ecc...
    Mentre mi � chiara la distinzione tra variabili di tipo oggetto e variabili normali, int,float,char ecc...(ringrazio il C).
    Supponiamo di avere una classe e una sottoclasse che � estensione della prima (estends) quindi eredita i metodi, costruttore ecc...
    Ma se io nella sottoclasse dichiaro un campo come final, come faccio ad inizializzarlo nella principale?
    Esempio :

    Ho la classe Figure e una sottoclasse triangolo.
    Supponiamo che i lati del triangolo siano immutabili e io li dichiari con" final double " lato_a,lato_b,lato_c.
    Ora nel main di Figure voglio dichiarare un oggetto di tipo triangolo e inizializzare il valore dei lati.
    Come si fa ?

    E perch� le variabili con cui definisco l'oggetto Figure mi viene detto dal compilatore di dichiararle come static ?
    Esempio :

    Ho dichiarato delle variabili :

    final String Tipo;
    static double perimetro;
    static double area ;

    public Figure ( String Tipo,double perimetro ,double area) {

    this.Tipo = Tipo;
    this.perimetro = perimetro;
    this.area = area;

    }
    ( metodi get e set vari
    .
    .
    .)
    Tipo,perimetro e area sono comuni a tutte le sottoclassi di Figure (tutte le figure rientrano in una categoria o Tipo e hanno un'area e un perimetro).
    Perché ho dovuto dichiarare le variabili come static ? ( mi obbligava il compilatore).
    Se vengono dichiarate come static non sono anche final ? In questo caso se volessi cambiare i lati del mio triangolo l'area rimarrebbe immutabile e non avrebbe senso ( non posso fare un set area ).
    Non ci sto capendo niente con Java .

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da feded Visualizza il messaggio
    Supponiamo di avere una classe e una sottoclasse che � estensione della prima (estends) quindi eredita i metodi, costruttore ecc...
    Giusto solo un appunto: i costruttori non sono "membri" della classe e non vengono mai "ereditati". Questo è ben precisato nel Java Language Specification.

    Quote Originariamente inviata da feded Visualizza il messaggio
    Ma se io nella sottoclasse dichiaro un campo come final, come faccio ad inizializzarlo nella principale?
    Esempio :

    Ho la classe Figure e una sottoclasse triangolo.
    Supponiamo che i lati del triangolo siano immutabili e io li dichiari con" final double " lato_a,lato_b,lato_c.
    Ora nel main di Figure voglio dichiarare un oggetto di tipo triangolo e inizializzare il valore dei lati.
    Come si fa ?

    E perch� le variabili con cui definisco l'oggetto Figure mi viene detto dal compilatore di dichiararle come static ?
    Esempio :

    Tipo,perimetro e area sono comuni a tutte le sottoclassi di Figure (tutte le figure rientrano in una categoria o Tipo e hanno un'area e un perimetro).
    Perché ho dovuto dichiarare le variabili come static ? ( mi obbligava il compilatore).
    Le questioni sono poste "male", anche il fatto che il compilatore ti suggerisce o peggio obbliga a dichiararle static. (davvero ti "obbliga"?)

    La questione è più semplice, vediamola così: vuoi fare una classe "base" Figura che contiene i campi perimetro e area "immutabili", perché tutte le figure hanno queste caratteristiche. Poi ad esempio sotto-classi Rettangolo, Cerchio, ecc...

    Questo è quanto di "sensato" che si può fare:

    codice:
    public abstract class Figura {
        private final double perimetro;
        private final double area;
    
        public Figura(double perimetro, double area) {
            this.perimetro = perimetro;
            this.area = area;
        }
    
        //... getPerimetro() e getArea() (NON i setter, ovviamente)
    }
    codice:
    public class Rettangolo extends Figura {
        private final double base;
        private final double altezza;
    
        public Rettangolo(double base, double altezza) {
            super((base+altezza)*2, base*altezza);
            this.base = base;
            this.altezza = altezza;
        }
    
        //... getBase() e getAltezza() (NON i setter, ovviamente)
    }

    Quote Originariamente inviata da feded Visualizza il messaggio
    Se vengono dichiarate come static non sono anche final ?
    No sono due cose ben distinte. final sulle variabili vuol dire che il valore della variabile non può cambiare dopo la sua inizializzazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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 © 2024 vBulletin Solutions, Inc. All rights reserved.