Newsgroup: it.comp.java
Titolo: Compilare un file .java

Salve a tutti,
avrei necessita' di creare un file .class dal sorgente .java .
Ho installato l'sdk di sun, ho eseguito il comando:
javac nomefile.java
e mi blocco nell'errore:
"nomeclasse is not abstract and does not override abstract method..."
di cui ingnoro il significato :(
Da quel poco che so, il file .java e' funzionante e ho gia' una
versione compilata ma in lingua inglese, ho solo tradotto i testi e sto
cercando di ricompilare il tutto.
Sto usando sdk versione 1.4.2_09 mentre so che il sorgente .java e'
piuttosto vecchiotto... potrebbe forse trattarsi di problemi di
compatibilita' ?
Penso che l'errore sia generato dalla riga "implements... " appena
sotto la dichiarazione della classe.
Scusate in anticipo le assurdita' dette, se qualcuno mi sapesse dare un
aiuto per compilare questo file mi farebbe felice!
Grazie

il compilatore ti sta dicendo che la classe "nomeclasse" deve essere
dichiarata abstract perche' contiene un metodo abstract.
Quasi certamente la tua classe implementa una interfaccia
(implements....) ma non fornisce una definizione per tutti i metodi
dell'interfaccia stessa.
Ovvero:
A parole semplici e molto 'imprecise' :
Un interfaccia e' un 'insieme' di dichiarazioni di metodi (funzioni) e
attributi (variabili).
Ma cio' che la differenzia da una classe e' che possiede solo le
dichiarazioni dei metodi e non le definizioni.
Dichiarazione:
modificatore (public,protected,private) nomeMetodo(parametri);
Definizione:
modificatore (public,protected,private) nomeMetodo(parametri){
codice....
codice..
}
Ovviamente siccome una dichiarazione non contiene del codice, se tu
invocassi quel metodo non ci sarebbe del codice da eseguire!
Per evitare questo problema non si possono creare oggetti dalle
interfacce (invece dalle classi si: new Classe();)
Il problema sorge quando una classe implementa una interfaccia, dato
che dalle classi si possono creare oggetti (con la new) potrebbe
accadere che tu crei un oggetto da una classe e poi vai a chiamare un
metodo ereditato da una interfaccia, ma di quel metodo non ne esiste il
codice!
Per evitare questo problema si e' deciso che si puo' procedere solo in
due modi:
1. dichiari la tua classe "abstract", in questo modo non sei obbligato
a creare il codice da inserire nei metodi ereditati dall'interfaccia,
ma così non puoi creare oggetti da quella classe
2. nella tua classe sovrascrivi i metodi ereditati dall'interfaccia
fornendogli il codice da eseguire.

Grazie per la precisa e dettagliata risposta!
Effettivamente il file .java che ho tradotto fa parte di un insieme di
file di classi e necessita anche di classi esterne che ho spacchettato
nel path da lui cercato all'interno della directory delle classi base.
Per quel che so il codice del file .java e' corretto e non saprei come
modificarlo, per cui scartando il metodo 1...  e' molto difficile fare
come dici al punto 2 ? Un profano come me potrebbe farcela con un
aiutino da chi ne sa ? :-"
c'e' forse qualche opzione forse da passare al compilatore ? (non ne ho
trovate)
Grazie

 di cui ingnoro il significato :(
Significa che la classe contenuta non č compilabile, contiene un errore.
Nel dettaglio, č una classe che implementa una interfaccia o estende una
classe astratta, non č dichiarata astratta e non implementa tutti i
metodi astratti della classe/interfaccia padre.

beh, guarda il codice dell'interfaccia che la classe ha dichiarato di
implementare
ovvero dove c'è scritto implements...
controlla che tutti i metodi (funzioni) contenuti in quell'interfaccia
siano contenuti anche nella classe e che tutti abbiano del codice da
eseguire al loro interno (in linguaggio tecnico che la classe
implementi tutti i medoti ereditati dall'interfaccia).