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

    superclasse e sottoclassi

    Ciao, io ho due classi (hotel e appartamento) che hanno molti campi in comune, quindi ho deciso di considerarli tutti Alloggi (superclasse), ho scritto il seguente codice:
    codice:
    public class Alloggi {
        static int idAlloggi;
        String nome;
        private String indirizzo;
        private long telefono;
        int prezzoSettimanale;
        int supplSettSucc;
        private String servizi;
    
        public Alloggi(String nome, String indirizzo, long telefono, int prezzoSettimanale, int supplSettSucc, String servizi){
            this.nome=nome;
            this.indirizzo=indirizzo;
            this.telefono=telefono;
            this.prezzoSettimanale=prezzoSettimanale;
            this.supplSettSucc=supplSettSucc;
            this.servizi=servizi;
        }
    dopo ho creato le sotto classi (es. appartamento)
    codice:
    public class Appartamento extends Alloggi{
        public enum tipologia{
            A,B,C;
        }
       
        tipologia type;
        boolean disponibilita;
    
        public Appartamento(String nome, tipologia type, String indirizzo, long telefono, int prezzoSettimanale, int supplSettSucc, String servizi){
            super(nome);
            this.type=type;
            super(indirizzo);
            super(telefono);
            super(prezzoSettimanale);
            super(supplSettSucc);
            super(servizi);
            this.disponibilita= true;
        }
    Adesso Netbeans mi da errore ogni volta ke uso "super" dicendo "cannot find symbol".. Perchè? cosa può essere?? la Sintassi è corretta??

    p.s. io vorrei ke il mio programma non creasse mai un oggetto di tipo Alloggi, ma solo Oggetti di tipo Hotel o Appartamento, è possibile farlo?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da crystal86
    codice:
        public Appartamento(String nome, tipologia type, String indirizzo, long telefono, int prezzoSettimanale, int supplSettSucc, String servizi){
            super(nome);
            this.type=type;
            super(indirizzo);
            super(telefono);
            super(prezzoSettimanale);
            super(supplSettSucc);
            super(servizi);
            this.disponibilita= true;
        }
    E mi pare ovvio.
    La classe Alloggi non prevede alcun costruttore che prende 1 solo parametro di tipo stringa... O gli passi tutti i parametri previsti dal costruttore o non arrivi da nessuna parte. super() non si usa per passare un parametro alla volta. Si devono passare tutti subito. Oltretutto super() si può usare solo come primissima istruzione all'interno di un costruttore.

    codice:
    super(nome, indirizzo, telefono, prezzoSettimanale, supplSettSucc, servizi);
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie, anche se per me tanto ovvio non è visto ke è la prima volta ke programmo in java..
    Cmq adesso ke ho queste 2 sottoclassi di alloggi, ora io una volta fatta questa dichiarazione
    codice:
    Alloggi h= new Appartamento("Palace", 5,"ssss",12345,ecc...);
    Siccome sono sicuro ke l'oggetto h è un Appartamento vorrei utilizzare i suoi campi, ma come faccio ad accedervi, ho provato a fare cast espliciti, ma nn li riconosce..
    codice:
    prezzoTot=(h.prezzoSettimanale*numero_tot_persone);// qui ok
    h.type=..; //non lo trova.. mi fa visualizzare solo i campi di Alloggi
    (Appartamento)h.type=..; //neanche così funziona
    Come mai?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non li riconosce perchè li fai nel modo sbagliato:

    codice:
    Alloggi h= new Appartamento("Palace", 5,"ssss",12345,ecc...);
    ((Appartamento) h).type = ...;
    PS: sconsiglio vivamente (soprattutto se sei alle prime armi) di utilizzare proprietà pubbliche; rendile private e crea dei metodi di accesso alle proprietà.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Originariamente inviato da LeleFT
    Non li riconosce perchè li fai nel modo sbagliato:
    Grazie mille ora funziona..

    PS: sconsiglio vivamente (soprattutto se sei alle prime armi) di utilizzare proprietà pubbliche; rendile private e crea dei metodi di accesso alle proprietà.
    scusa ma per me è arabo, qui tra istanze, metodi, classi, proprietà non ci capisco più una mazza di cosa rendere pubblico, cosa privato e cosa static..
    Ciao.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da crystal86
    scusa ma per me è arabo, qui tra istanze, metodi, classi, proprietà non ci capisco più una mazza di cosa rendere pubblico, cosa privato e cosa static..
    Ciao.
    Buono studio, allora.
    L'argomento è molto vasto e non è certo una passeggiata.

    Per fare un esempio, sul tuo codice, ecco come trasformerei la tua classe Alloggi:

    codice:
    public class Alloggi {
        static int idAlloggi;   // Non ho capito a cosa serva questo: lo tralascio
        private String nome;
        private String indirizzo;
        private long telefono;
        private int prezzoSettimanale;
        private int supplSettSucc;
        private String servizi;
    
        public Alloggi(String nome, String indirizzo, long telefono, int prezzoSettimanale, int supplSettSucc, String servizi){
            this.nome=nome;
            this.indirizzo=indirizzo;
            this.telefono=telefono;
            this.prezzoSettimanale=prezzoSettimanale;
            this.supplSettSucc=supplSettSucc;
            this.servizi=servizi;
        }
    
        // Metodi GETTER per ottenere le informazioni sullo stato dell'oggetto
        public String getNome() { return nome; }
        public String getIndirizzo() { return indirizzo; }
        public long getTelefono() { return telefono; }
        public int getPrezzoSettimanale() { return prezzoSettimanale; }
        public int getSupplSettSucc() { return supplSettSucc; }
        public String getServizi() { return servizi; }
    
        // Metodi SETTER per variare/impostare le informazioni sullo stato dell'oggetto
        public void setNome(String nome) { this.nome = nome; }
        public void setIndirizzo(String indirizzo) { this.indirizzo = indirizzo; }
        public void setTelefono(long telefono) { this.telefono = telefono; }
        public void setPrezzoSettimanale(int prezzoSettimanale) { this.prezzoSettimanale = prezzoSettimanale; }
        public void setSupplSettSucc(int supplSettSucc) { this.supplSettSucc = supplSettSucc; }
        public void setServizi(String servizi) { this.servizi = servizi; }
    }

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Per quanto riguarda quell'idAlloggio è un ID univoco degli alloggi (che possono essere o Hotel o Appartamenti), nella classe Agenzia dorei avere una sorta di lista di alloggi che l'agenzia ha, quindi ho creato una Hashmap di alloggi, con relativi metodi di addAlloggio e removeAlloggio..


    ho capito, grazie del consiglio, ma dopo se in un altra classe vorrei fare una cosa del genere:
    codice:
    prezzoTot-=(num_bambini*((Hotel)a).scontoBaby*(int)settimane);
    lo dovrei rifare così:

    codice:
    prezzoTot-=(num_bambini*((Hotel)a).getscontoBaby()*(int)settimane);
    giusto????

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da crystal86
    Per quanto riguarda quell'idAlloggio è un ID univoco degli alloggi (che possono essere o Hotel o Appartamenti), nella classe Agenzia dorei avere una sorta di lista di alloggi che l'agenzia ha, quindi ho creato una Hashmap di alloggi, con relativi metodi di addAlloggio e removeAlloggio..


    ho capito, grazie del consiglio, ma dopo se in un altra classe vorrei fare una cosa del genere:
    codice:
    prezzoTot-=(num_bambini*((Hotel)a).scontoBaby*(int)settimane);
    lo dovrei rifare così:

    codice:
    prezzoTot-=(num_bambini*((Hotel)a).getscontoBaby()*(int)settimane);
    ????
    Sì.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.