Allora,

leggere manuali a gogo non basta.. dovresti studiarti un testo universitario (o meglio, piu testi) per fare una buona oop, di certo non i manualetti o simili... ci sono anche ebook sui Design Pattern che in genere sono molto utilizzati in OOP.. cmq vediamo di capire quello che intendevi con le classi nell'esempio...

la classe Utente:

la classe utente, o meglio direi Character visto che usa armi per sparare, deve avere le funzioni per maneggiare le armi e gli oggetti... quindi metodi del tipo "spara", "raccogli arma", "cambia arma" e quant'altro. A seconda del tipo di gioco, potrebbe essere compito della classe Utente sapere se è in grado o meno di usare un'arma, non viceversa. Nel senso che l'arma non sa chi può gestirla.. è un pò come chiedere ad un fucile se può essere maneggiato da un bambino o da una donna...

Quindi o è utente che sa se può usare o meno un'arma, oppure ci vorrebbe un'altra classe, magari estesa da utente... una classe tipo "Razza" che impedisca alòl'utente di usare certe armi.. ad esempio se è un fantasy, puoi dire che gli elfi non possono usare le scuri e che i nani non possano usare i bastoni da mago... oppure sbizzarrisciti dipende un pò dalle regole del gioco.

Ancora:

codice:
 public function getListaWeapon(); //Resituisce un array con le armi comprabili dall'utente 
    public function buyWeapon($id_arma); //Compra un'arma 
    public function getEquipedWeapon();//Restituisce l'arma equipaggiata dell'utente 
    public function hasBoughtWeapon($id_arma); //Restituisce true se l'utente ha comprato già l'arma 
    private function canBuyWeapon($id_arma);
tutti questi metodi non possono essere dati ad arma, ma a qualcos'altro.. ad esempio ad Utente.. è utente che ha la lista delle armi nel suo zaino, che può comprare un'arma (non si è mai visto che un fucile compri una pistola), che consoce quello che ha comprato, che sa se può o non può comprare un'arma. Arma al piu ha come metodi:

+ spara
+ ricarica
+ quante munizioni restano

e simili.

Ancora:

Arma può implementare Item, ma nella sua accezione base.. nel senso che arma è un oggetto.. Item può avere metodi del tipo "quanto peso", "quanto ingombro", "di che materiale sono fatto" che Arma poi implementerà a suo piacimento.. Nella maniera piu assoluta Item può contenere metodi riferiti a qualcosa che spara, così la classe Item puoi usarla come base anche per oggetti che non sparano, esempio libri, fogli, mappe etc etc

Insomma, per riassumere: ogni oggetto deve compiere azioni o avere proprietà specifiche per il tipo di oggetto, metodi ibridi (tipo arma che può comnprare qualcosa) sono sinonimi di errori concettuali. Devi anche basarti sul tuo buonsenso e la tua esperienza per capire chi è che compie un'azione e chi la subisce, chi è che ha delle capacità e chi no e quant'altro e tramutare il tutto in classi. Ti suggerisco di crearti degli schemi prima, non passare subito al codice.. schemi Uml per la precisione, con cui tirare giù lo schema concettuale delle tue classi e poi passare all'implementazione (ci sono tutta una serie di programmi free e non che ti aiutano a farli, credo eclipse stesso abbia i moduli per fare progetti su uml)


ps: E' abbastanza inutile dare all'arma il riferimento all'utente. Non ne vedo l'utilizzo