Entra

View Full Version : [JAVA] istanziazione interfacce???


VioletFairy
16-03-2008, 17:27
Come e' possibile che il metodo doGet della classe Servlet di Java implementi le interfacce HttpServletResponse e HttpServletRequest, se in java non e' permessa l'istanziazione di interfacce?
Mi spiego meglio HttpServletResponse e HttpServletRequest sono 2 interfacce e il metodo doGet le riceve come parametri... Perche' succede? :help:

Ufo13
16-03-2008, 17:37
Non conosco il problema specifico ma probabilmente esistono diverse implementazioni delle dette interfacce (oppure devi implementartele tu)

gugoXX
16-03-2008, 18:08
Come e' possibile che il metodo doGet della classe Servlet di Java implementi le interfacce HttpServletResponse e HttpServletRequest, se in java non e' permessa l'istanziazione di interfacce?
Mi spiego meglio HttpServletResponse e HttpServletRequest sono 2 interfacce e il metodo doGet le riceve come parametri... Perche' succede? :help:

La prima frase e' sbagliata, penso.
Probabilmente avresti dovuto chiederti:
"Come mai il metodo doGet della classe Servlet richiede in ingresso un interfaccia HttpServletResponse o un interfaccia HttpServletRequest, se sono oggetti che non possono essere istanziati?"

un metodo che richiede come input una interfaccia semplicemente richiede un qualsiasi oggetto che implementa quella interfaccia.
Basta che gli passi un qualsiasi oggetto che implementi una di quelle due interfaccie, e tutto dovrebbe compilare (e funzionare).

mad_hhatter
16-03-2008, 18:13
Come e' possibile che il metodo doGet della classe Servlet di Java implementi le interfacce HttpServletResponse e HttpServletRequest, se in java non e' permessa l'istanziazione di interfacce?
Mi spiego meglio HttpServletResponse e HttpServletRequest sono 2 interfacce e il metodo doGet le riceve come parametri... Perche' succede? :help:

perdonami se dico cose che magari reputi ovvie, ma da quello che capisco leggendo la tua domanda mi viene spontaneo risponderti così:

sia A un'interfaccia e sia X.m(A) un metodo della classe X, che richiede come parametro un oggetto di tipo A.
Ora, essendo A un'interfaccia non può, come sai, esistere, a rigore, un'istanza di A. Ma se esiste una classe B che implementa A, allora un'istanza b di B è anche un oggetto di tipo A.

dichiarare un metodo che riceve come parametri oggetti dotati di una certa interfaccia permette di generalizzare il metodo stesso: esso potrà manipolare dati di qualunque tipo fin tanto che questi avranno tutte le proprietà necessarie affinché detto metodo possa manipolarli.
Tutte le differenze tra dati di tipo diverso che siano irrilevanti al fine di poter essere manipolati dal metodo c vengono così isolate.
Detto altrimenti, se il metodo c, per lavorare con un dato, ha bisogno di conoscere un certo insieme di proprietà del dato stesso, obbligare c ha conoscere proprietà irrilevanti restringe il suo utilizzo in modo irragionevole. Usare un'interfaccia per specificare le proprietà di un parametro di c è un modo per generalizzare il suo utilizzo.

Se ho scritto cose per te ovvie, allora ho frainteso la tua domanda: me ne scuso

VioletFairy
16-03-2008, 18:50
ok, grazie ragazzi!!! :)

andbin
16-03-2008, 19:54
Come e' possibile che il metodo doGet della classe Servlet di Java implementi le interfacce HttpServletResponse e HttpServletRequest, se in java non e' permessa l'istanziazione di interfacce?Perché il server invoca quel metodo passando 2 oggetti di 2 classi che implementano quelle interfacce. È chiaro che non si istanziano mai interfacce ... semmai si istanziano classi che implementano delle interfacce.

Ma è appunto quello il bello del "polimorfismo". A te non deve interessare che tipo di oggetti (e di quali classi) ti vengono passati nel doGet. A te interessa solo sapere che uno è-un HttpServletRequest e l'altro è-un HttpServletResponse.