PDA

View Full Version : [JAVA] definizione di java.awt.window e java.awt.frame


mad_hhatter
31-05-2007, 17:45
Sto leggendo la documentazione delle classi java.awt.window e java.awt.frame.

Frame estende Window, ma... un costruttore di Window prende come argomento un Frame... come è possibile? Frame non esiste finchè non è definita Window, ma Window è definita usando Frame... come è possibile questo??

quale regola del linguaggio sto dimenticando?

andbin
31-05-2007, 17:50
Sto leggendo la documentazione delle classi java.awt.window e java.awt.frame.

Frame estende Window, ma... un costruttore di Window prende come argomento un Frame... come è possibile? Frame non esiste finchè non è definita Window, ma Window è definita usando Frame... come è possibile questo??Se leggi bene il parametro Frame o Window che c'è nei vari costruttori di Window è il "owner".

mad_hhatter
31-05-2007, 17:50
l'unico modo che mi viene in mente è il seguente escamotage:

creo un file Window.java con scritto
"
class Window {}
"

compilo

creo un file Frame.java con scritto:

"
class Frame extends Window {}
"

compilo

e ora modifico Window.java aggiungendo un costruttore che chieda un Frame...

ma è un modo un po' sporco di fare le cose... no?

mad_hhatter
31-05-2007, 17:52
Se leggi bene il parametro Frame o Window che c'è nei vari costruttori di Window è il "owner".

si, ma tecnicamente come faccio a definire la classe A che necessita della classe B, la quale classe B è una sottoclasse di A... cioè, come è possibile?

mad_hhatter
31-05-2007, 17:54
Se leggi bene il parametro Frame o Window che c'è nei vari costruttori di Window è il "owner".

mi sono espresso male... sto parlando di DEFINIZIONE della classe, non di creazione di un oggetto di quella classe

PGI-Bis
31-05-2007, 18:53
Dai una passata di google per "compilers, resolving circularity". Trovi un bel mucchio di quei magnifici documenti tutti pieni di letterine greco-etrusche le quali dimostrano inequivocabilmente "che si può fare". Io mi fido :D.

mad_hhatter
01-06-2007, 09:42
spulcerò bene google per ora ho dato solo una veloce occhiata senza trovare materiale molto utile, il problema è che questo

//file Poldo.java
class Poldo {
Poldo(Ciccio c) {}
}

//file Ciccio.java
class Ciccio {
Ciccio(Poldo p) {}
}

compila, mentre questo:

//file Poldo.java
class Poldo extends Ciccio {
Poldo(Ciccio c) {}
}

//file Ciccio.java
class Ciccio {
Ciccio(Poldo p) {}
}

non compila!

andbin
01-06-2007, 09:49
//file Poldo.java
class Poldo extends Ciccio {
Poldo(Ciccio c) {}
}

//file Ciccio.java
class Ciccio {
Ciccio(Poldo p) {}
}

non compila!Certo che non compila ... ma non per quello che pensi tu.
Se Poldo estende Ciccio, allora il costruttore di Poldo dovrebbe chiamare il super-costruttore di Ciccio. Il compilatore infatti inserisce per default una chiamata super().
Peccato che .... Ciccio abbia un unico costruttore che ha come parametro Poldo e quindi NON ha un costruttore senza argomenti!!

Questi sono i concetti "base" dei costruttori .....

mad_hhatter
01-06-2007, 10:07
ma per la pupazza!!!!!!!!!!!

come al solito guardi la pagliuzza nell'occhio del tuo vicino e non ti accorgi della trave nel tuo... come ca...pperi ho fatto a dimenticarmi del costruttore di default??????????????

grazie andbin, mi hai restituito il sonno :)