Sì, se usi direttamente la classe derivata per fare tutto hai la soluzione che ti ha proposto Xaratroom prima di me, che va bene. Nel caso però volessi conservare l'ereditarietà devi ricorrere ad una soluzione tipo quella che ti ho postato io...
Sì esatto, l'errore consisteva nell'aver confuso le classi (che sono quelle coinvolte nell'ereditarietà) con gli oggetti, che sono solo intanze delle classi.Come mi hai descritto te la situazione però eredita si i membri ma non il loro valore quindi?
Quando chiami il metodo creazionefile() su prova1 (oggetto di classe x) vai ad associare al suo attributo aprifile un certo valore. Dopo utilizzi il metodo dati() su prova2, che è un altro oggetto, la cui classe ha ereditato da x attributi e metodi public ma questo non significa che l'oggetto prova2 erediti i valori degli attributi di prova1. Infatti se all'interno del metodo dati() provi a stampare aprifile (col tuo programma di prima, senza la modifica) ti ritroverai con un valore nullo, questo perché non hai mai assegnato nulla all'attributo aprifile di prova2, ma solo a quello di prova1.
L'ereditarietà coinvolge gli schemi delle classi, non le loro particolari istanze (oggetti).