Ciccio92 ha scritto:
Sisi l'ho letta , solo che sul file del compito non c'è scritto che x e y devono essere abstract quindi non so come implementarli
Ascolta: quando tu hai definito la interfaccia
public interface ICoordinata {
public double x();
public double y();
}
questi due metodi
sono astratti. Nelle interfacce i metodi sono sempre implicitamente public
E abstract. Se vuoi puoi esplicitare queste due parole chiave in qualunque combinazione/ordine ma comunque i metodi sono astratti e pubblici.
Quando hai definito AbstractCoordinata astratta, ti ho detto prima che NON devi implementare x()/y(), non li dovresti proprio scrivere, neanche solo per ribadire il fatto che sono astratti. Lo sono già! Tra l'altro è anche abbastanza chiaro dal testo che hai postato: al punto 2.2 non ti dice di scriverli in AbstractCoordinata e oltretutto dice pure che
non ci possono essere variabili di istanza. Non avendo uno "storage" per tenere dei valori, non sapresti appunto nemmeno cosa far restituire.
Ora, il fatto che in AbstractCoordinata x() e y() siano ancora astratti NON ti deve far pensare che sia sbagliato o che non puoi "chiamarli". I metodi ci saranno in un oggetto istanziato poiché dovrai per forza fare poi una sottoclasse concreta che li implementa in modo valido. E infatti in CoordinataXY il testo ti dice che devi mettere le variabili di istanza. Lì dovrai implementare anche x() e y() (chiaramente per accedere ai campi).
Come dicevo prima, in "distanza" e "somma" puoi tranquillamente ragionare sul concetto da implementare senza sapere DOVE saranno implementati i metodi. distanza/somma ricevono un ICoordinata. A runtime riceverai un oggetto che sicuramente ha x()/y() concreti. Idem per il "this", su cui puoi chiamare x()/y(), in quanto l'oggetto avrà sicuramente questi implementati.
E ripeto cosa dicevo prima:
quando istanzierai oggetti di tipo CoordinataXY, se su questi invocherai distanza/somma (di AbstractCoordinata), questi metodi useranno i x() e y() che sono implementati appunto nell'oggetto istanziato cioè in CoordinataXY.