Scusate se vi rompo ad agosto, ma la prof è in ferie. La prof dice che non si possono istanziare le classi astratte, infatti lo dice + volte nelle slide e pure sul manuale di Java, ma nel codice delle prime classi del progetto, in alcune classi già implementate da lei, crea oggetti di classi astratte nelle classi derivate, sulle slide dice che si possono assegnare oggetti di sottoclassi a variabili di superclasse, sul manuale dice che "sebbene le classi astratte non possano essere utilizzate per istanziare oggetti, possono essere sfruttate per creare riferimenti a oggetti, perchè l'approccio di Java al polimorfismo durante l'esecuzione viene implementato attraverso l'utilizzo dei riferimenti di superclassi. Di conseguenza, deve essere possibile creare un riferimento a una classe astratta in modo che possa essere utilizzato per puntare a un oggetto di sottoclasse."
nell'esempio infatti:
abstract class Figure {...}
class Rectangle extends Figure {...} //Rectangle è sottoclasse concreta che estende la classe astratta Figure
poi nel main di un'altra classe mette:
//Figure f = new Figure(10, 10); //ora non è valido
Rectangle r = new Rectangle(9,5);
Figure figref; //questo va bene, non viene creato alcun oggetto
figref = r;
in poche parole ha assegnato un oggetto della sottoclasse ad una variabile (o riferimento a oggetto) di una super classe, stessa cosa che dice nelle slide, ma nel codice del progetto che ci dà la prof mette:
abstract class Attribute....
poi nella sottoclasse derivata Data c'è:
attributeSet = new Attribute[5];
in un altro caso mette:
abstract class Item {..}
e nella sottoclasse derivata FrequentPattern:
private Item fp[];
fp=new Item[0];
Item temp []=new Item[length+1];
fp=temp;
cioè crea oggetti di classi astratte....perchè?
cmq la prima esercitazione mi funziona ma dovrebbe dare errore.
Grazie, buone vacanze. Ciao