Newsgroup: it.comp.java
Titolo: classi astratte e costruttori

Ciao, qualcosa mi sfugge nei fondamentali: come faccio a istanziare un
oggetto il cui costruttore accetta un tipo che fa riferimento ad una classe
astratta?
Ad es. PrintWriter(OutputStream out) dove OutputStream è una classe
astratta...
Come ci si comporta?
Grazie mille.
Elena


Definisci un tuo oggetto derivato da OutputStream o ottieni qualche
cosa che sia trasformabile in un OutputStream e quindi istanzi la
classe passandoglielo.
Davide

Ciao Elena, il tuo problema si risolve passando alla Classe PrintWriter, una
classe "reale" che implementa quella classe astratta.
Se per esempio devi scrivere su un file puoi usare la classe :
"FileOutputStream" che nel caso specifico implementa la tua astratta
OutputStream.
Spero di essere stato chiaro.
P.S. per caso il metodo PrintWrite fa parte del Package per scrivere i PDF ?

Scusate, prima nel porre la domanda non mi sono spiegata molto bene. In
realtà non volevo la risposta al problema specifico, ma ero interessata al
concetto di fondo. Ho un po' di confusione sull'argomento,  come devo fare
se voglio istanziare una classe, chiamiamola Classe1, la quale nel suo
costruttore richiede una classe astratta: Classe1( Classe2  c2 ) dove
Classe2 è una classe astratta?
Nella documentazione si trovano spesso casi simili. Da ciò che ricordo non è
possibile creare un'istanza di una classe astratta. Vorrei sapere se c'è un
metodo più breve ed elegante che estendere la Classe2 per avere qualcosa di
istanziabile.
Grazie in anticipo per i chiarimenti forniti.
Elena

:

Passi un'istanza di una classe derivata da quella classe astratta (o
interfaccia). 
Ad esempio, per creare un PrintStream, ti serve un'istanza di
un'OutputStream. Siccome OutputStream e' astratta, giocoforza gli
passerai sempre una classe derivata da OutputStream (ad esempio,
FileOutputStream, etc). 
In codice OO puoi legalmente assegnare una variable di tipo statico
"base" con un oggetto di tipo statico "derivato", posto che sia proprio
derivato da "base". 
Quindi 
 OutputStream os  = new FileInputStream("..blahblahblah..");
e' legale, anche se i tipi statici (OutputStream e FileOutputStream) non
sono identici, proprio perche' tra FileOutputStream e OutputStream
c'e' una relazione di derivazione.
Idem col passaggio di parametri: quindi puoi scrivere 
new PrintStream(new FileOutputStream("...")) perche' FileOutputStream
e' una sottoclasse di OutputStream.
Tra parentesi, in Java, la cosa funziona anche con le interfacce.
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun

[...]
Per amor di precisione: "un'istanza di una classe derivata da ..."
;-)


 possibile creare un'istanza di una classe astratta.
Vero ... puoi pero' creare un'istanza di una classe che estende la classe
astratta (a meno che non sia a sua volta stratta ;-).
Inoltre una volta creata la classe, la puoi "castare" facendola diventare dello
stesso tipo
della classe astratta.
Un esempio:
Calendar c = new GregorianCalendar();
Calendar e' una classe astratta!


Ringrazio tutti per i chiarimenti forniti. ;-)

"Elena" <x@x.x> wrote in message news:9aa0qq$5cdk$1...@stargate1.inet.it...

In generale le classi astratte sono una via di mezzo tra interfacce e classi
Java ovvero
contengono sia prototipi che definizioni di metodi.
Per questo motivo, per poter essere istanzaiata una classe astratta
necessita di essere estesa per mezzo del meccanismo della
ereditarietà.
Di fatto, data una classe astratta A, puoi crearne una istanza mediante
una classe Java B che estende A.
Ciao
Massimiliano Tarquini
E-Mail:tarq...@all-one-mail.net
-------------------------------------------------------------------
Java Mattone dopo Mattone, il manuale Java online
http://www.java-net.tv/jmonline
-------------------------------------------------------------------
"Se, in un primo momento, l'idea non è assurda, allora
non c'è nessuna speranza che si realizzi".
A. Einstein
-------------------------------------------------------------------