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

    Polimorfismo: astrazione classi.

    Buogiorno a tutti e buon we.
    Per minimizzare il codice di due classi:

    -bicicletta(int peso, String nome, int diametro)
    -automobile (int peso, String nome, int potenza)

    utilizzo una interfaccia "Veicolo" ed una classe astratta AbstractVeicolo.

    Siccome i costruttori delle due classi sono identici per quanto attiene i tipi, penso sia possibile istanziare gli oggetti nella superclasse dalle classi base invocando il costruttore super(int, String, int).
    Ma come si fa?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    codice:
    public class A {
       private int x;
       public A(int x) { this.x = x; }
    }
    
    public class B {
        public B(int x) { super(x); }
    }
    
    ...
    
    B b = new B(100);
    // oppure: A b = new B(100);
    Attenzione che in B sei obbligato a mettere almeno un costruttore che chiama quello di A, non puoi non metterlo anche se non fa altro che fare da passacarte (con super)
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Alex, grazie per la risposta.
    Mi resta un dubbio:
    codice:
    public abstract class AbstractVeicolo implements Veicolo {
     
                            private int peso;
                            private String modello;
                            private int specific;
                           
                            public AbstractVeicolo(int peso, String modello, int specific){
                                                   this.peso = peso;
                                                   this.modello = modello;
                                                   this.specific = specific;
                            }
                            public int getPeso(){return this.peso;}
                            public String getModello(){return this.modello;}
                            public int getSpecific(){return this.specific;}
                            public int getPotenza(){return this.specific;}//per Automobile
                            public int getDiametro(){return this.specific;}//per Bicicletta
    
    
    ............................
    
    
    public class Automobile extends AbstractVeicolo implements Veicolo{
                            public Automobile (int p, String m, int kw){super(p, m, kw);}
                                                  
    …………………………………….                                     
    }
    analogo per bicicletta
    Così funziona? ....vorrei però evitare quello "specific"....

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da adrenalinico Visualizza il messaggio
    Così funziona? ....vorrei però evitare quello "specific"....
    Tieni a mente che in una classe abbastanza astratta (nel senso di "generica") come quella che hai postato, dovrebbe esserci solo quello "stato" e "comportamento" che è appropriato e sensato per tutti i veicoli.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Tieni a mente che in una classe abbastanza astratta (nel senso di "generica") come quella che hai postato, dovrebbe esserci solo quello "stato" e "comportamento" che è appropriato e sensato per tutti i veicoli.
    ...quindi dovrei pervenire a quello che avrei in mente di fare.
    Cioè lasciare nelle classi base la parte che le caratterizza specificamente(cioè nel caso in esame Potenza e Diametro)...
    Il tutto però nascondendo ad un client l'implementazione di un oggetto piuttosto che ad un altro...

  6. #6
    Ecco una buona soluzione:
    codice:
    public class Studente extends AbstractPersona implements Persona{
                            private int cfu;
                            public Studente(String cf, int eta, String residenza, int cfu){ 
                                                   super(cf, eta, residenza); 
                                                   this.cfu=cfu;
                            }
    
    
                            public Studente(String cf, int eta, String residenza){ 
                                                   super(cf, eta, residenza);
                            }                      
                            public int getCfu(){
                                                   return this.cfu; }
     
    public abstract class AbstractPersona implements Persona{
     
                            private String cf;
                            private int eta;
                            private String residenza;
    ……..
                           
                            public AbstractPersona(String cf, int eta, String residenza){
                                                   this.residenza=residenza;
                                                   this.cf = cf;
                                                   this.eta=eta;
                            }
                            public int getEta(){
                                                   return this.eta;
                            }
                            public String getCf(){
                                                   return this.cf;
                            }
                            public String getResidenza(){
                                                   return this.residenza;
                            }
    ……

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.