Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[JAVA] Istanziare un oggetto di una classe interna???

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[JAVA] Istanziare un oggetto di una classe interna???

Messaggioda caralu » mer set 27, 2006 7:33 pm

Ciao a tutti! Ho un problema:
sto creando 2 classi (BonusVita e BonusVelocità) interne ad una classe madre Bonus. Vorrei istanziare dall'esterno (dalla classe Game) degli oggetti di tipo BonusVita e BonusVelocità,non posso farlo?
Ho pensato anche di creare come classi esterne le 2 classi BonusVita e BonusVelocità facendogli estendere a entrambe la classe Bonus (da cui devono ereditare tutti i metodi e le variabili), ma non mi sembra la soluzione ottimale (sarebbe più facile da implementare ma vorrei fare la cosa più "lineare" a livello progettuale), dato che queste classi risulterebbero piccolissime, con solo un metodo. Potete darmi qualche consiglio?
Slackware 11 - Kernel 2.6
Avatar utente
caralu
Aficionado
Aficionado
 
Messaggi: 43
Iscritto il: mer dic 28, 2005 4:13 pm

Messaggioda tux2 » gio ott 19, 2006 10:55 pm

Se le classi di cui parli hanno la stessa interfaccia della classe madre, allora non ci sono problemi, Devi creare due method Factory, del tipo :

Codice: Seleziona tutto
public class Bonus {
   public void methodOne() {
      // implementazione
   }
   public void methodTwo() {
      // implementazione
   }
   // factory method per BonusVista
   public static Bonus createBonusVista() {
      return new Bonus() {
         public void methodOne() {
            // overriding del metodo Bonus.methodOne()
         }      
      };
   }
   // factory method per BonusVelocita
   public static Bonus createBonusVelocita() {
      return new Bonus() {
         public void methodTwo() {
            // overriding del metodo Bonus.methodTwo()
         }      
      };
   }
}


o anche :

Codice: Seleziona tutto
public class Bonus {
   public void methodOne() {
      // implementazione
   }
   public void methodTwo() {
      // implementazione
   }
   // factory method per BonusVista
   public static Bonus createBonusVista() {
      return new BonusVista();
   }
   // factory method per BonusVelocita
   public static Bonus createBonusVelocita() {
      return new BonusVelocita();
   }
}

class BonusVelocita extends Bonus {
   public void methodTwo() {
      // overriding del metodo Bonus.methodTwo()
   }
}

class BonusVista extends Bonus {
   public void methodOne() {
      // overriding del metodo Bonus.methodOne()
   }
}


In questo modo invece di chamare il costruttore new BonusVista() devi chiamare il factory method Bonus.createBonusVista().

Nel primo esempio Bonus è l'unica classe che ha visivilità sulle sue sottoclassi, mentre nel secondo, puoi dare al massimo visibilità di package alle classi in quanto altrimenti dovresti dichiararle in sorgenti separati con nome uguali alle classi (vincolo base in java per le classi pubbliche).

Se invece le classi che devi scrivere non hanno interfaccia esattamente uguale a Bonus (ad esempio hanno dei bonus in più) allora devi per forza renderle pubbliche, o almeno creare delle interfacce pubbliche per descrivere tali classi.

Ciao
Le persone si dividono in 10 categorie,
quelle che conoscono il binario e quelle che non lo conoscono.
Avatar utente
tux2
Neo Iscritto
Neo Iscritto
 
Messaggi: 22
Iscritto il: lun ago 07, 2006 10:08 am


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising