Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106

    [JAVA] problema in compilazione

    Ciao ragazzi, ho un problema in compilazione che non riesco a risolvere..putroppo non vedo il problema.
    In poche parole ho 2 classi astratte Piatto e Bevanda, esse sono sottoclassi (quindi extends VociDiMenu) astratte VociDiMenu. Quando compilo Piatto o Bevanda ho il seguente errore:
    Piattp.java:8: cannot find symbol

    Symbol : construct VoceDiMenu
    location: class VoceDiMenu
    {
    ^
    1 error

    Vi posto le 3 classi:

    VoceDiMenu
    codice:
    import java.util.Vector;
    
    public abstract class VoceDiMenu
    {
    	private String nome;
    	private Vector<VoceDiMenu> lista;
    	private Piatto z;
    	//private Tavolo t;
    
    	public VoceDiMenu(String a)
    	{
    		nome = a;
    		lista = new Vector<VoceDiMenu>();
    	}
    
    	public void add(VoceDiMenu a)
    	{
    		lista.add(a);
    	}
    
    }
    Piatto....vi metto solo questo perchè bevanda è uguale, cambia solo il nome del costruttore che è bevanda al posto di piatto
    codice:
    public abstract class Piatto extends VoceDiMenu
    {
    	private String nome; 
    	private int prezzo;
     
    
    	public Piatto(String a)
    	{
    		nome = a;
    		prezzo = 0;
    	}
    
    	public String toString()
    	{
    		return "Nome piatto: "+nome;
    	}
    }

    Riuscireste ad aiutarmi??

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    Scusatemi ragazzi...è il secondo post uguale...l'altro non riesco a cancellarlo...mi dice che non ho i permessi

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    La superclasse richiede un parametro; devi inviarle una String.

    Ciò che hai fatto è inutile nella seconda classe. Non ti serve il String nome, lo terrà la superclasse questo (quindi dal costruttore della sottoclasse invoca super e passa come parametro il nome).

    Se la classe Piatto la utilizzi, è inutile dichiararla astratta. E dichiarare astratta la sua superclasse non ha molta utilià. Una classe astratta fornisce di norma metodi astratti che le classi che la estendono devono implementare (e possono avere dei metodi "normali"). Nel tuo caso non vedo metodi astratti che debbono essere implementati da altre classi... ergo l'abstract lo puoi togliere, poichè per come lo utilizzi è errato.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    Eh cavolo hai ragione...putroppo il prof ha dato un vecchio tema d'esame in cui quasi tutte le classi sono astratte, non capisco l'utilità,....cmq ritornando al problema che mi spiegavi. In pratica io ho una sottoclasse concreta CARNE che estende PIATTO, infatti in carne chiamo il costruttore di piatto usando super(Stringa nome_del_piatto). Successivamente mi viene chiesto di far diventare Piatto sotto classe di VODEDIMENU....quindi in questo caso devo per forza utilizzare super nel costruttore di piatto???...quindi se ho una super classe astratta , la sua sottoclasse deve utilizzare per forza super??


    Perche' il problema è questo...in VoceDiMenu voglio inserire semplicemente dei Piatti es CARNE (quindi costruirò degli oggetti di tipo carne che si chiameranno Vitello, Coniglio)...dopo ti che volevo inserirli nel vettore di VociDiMenu( passando ovviamente da Piatto.)...solo che se utilizzo super nel costruttore di piatto ogni volta che creero' un oggetto di tipo VociDiMenu, mi verra' creato un vettore nuovo...

    public VoceDiMenu(String a)
    {
    nome = a;
    lista = new Vector<VoceDiMenu>();
    }

    Io volevo creare un solo vettore VoceDiMenu che Avesse un nome e bona...

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Non mi è molto chiaro, quindi smentiscimi se erro.

    Potresti far così: i tuoi piatti (inteso come Carne etc.) saranno sottoclassi di Piatto, e VociDiMenu memorizzerà un elenco di Piatti nella collection.

    Non mi è chiara l'affinità che hanno queste classi comunque...


    super lo invochi per invocare il costruttore della superclasse (chiami la versione del costruttore specificata; se hai un costruttore vuoto, senza parametri, dalla sottoclasse invocherai super() altrimenti se hai ad esempio uno String dalla sottoclasse invocherai super(String)).
    Le classi astratte definiscono un tipo di dato che non può essere utilizzato perchè non avrebbe senso utilizzare (sono classi a cui mancano informazioni, ed è compito delle altre classi metterle); in pratica sono quelle classi per cui avere un oggetto è inutile.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    no hai ragione...è impossibile spiegarti in poche righe il problema..chq hai capito....invece dovrei aver compreso quello che dici però...ovviamente senza guardare l'utilità della cosa...guardando il mio esempio, voglio avere VociDiMenu (e rimane superclasse di Piatto) semplicemente con un costruttore che crei un vettore e basta....e Piatti non deve richiamare tramite super il costruttore della super classe..questa cosa NON si può fare giusto?? se ho capito quello che dici

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.