Ciao ho un problema con le classi astratte; se definiscono dei metodi astratti,essi devono essere implementati dalle sottoclassi.Fonoscono quindi lo scheletro per le classi figlie.E qui sta il problema.
Devo costuire un programma che costruisca una torre,formata da blocchi e da blocchi numerati:

codice:
abstract class Blocco implements Comparable{
    String colore;
Blocco(String colore){
    this.colore=colore;
}
public String getColore(){
    return colore;
}
abstract boolean npuoStareSopra(Blocco b);
abstract int compareTo(Blocco y);
}
Fin qui tutto bene e tutto è compilato correttamente. Poi la sua sottoclasse:

codice:
class BloccoNumerato extends Blocco {
    String colore;
    int numero;
BloccoNumerato(String colore,int numero){
    super(colore);
    this.numero=numero;
}
public boolean npuoStareSopra(Blocco b){
    if(b!=null && b.colore.equals(colore)){
        return true;
    }else
    return false;
    
}
public int compareTo(Blocco y){
    int color=colore.compareTo(y.colore);
        return color;
    }
}
Il compilatore mi segnala un errore alla prima riga della sottoclasse BloccoNumerato di tipo:
BloccoNumerato is not abstract and does not override abstract method compareTo(java.lang.Object) in java.lang.Comparable
class BloccoNumerato extends Blocco {

Adesso mi chiedo...ho implementato tutti i metodi della classe astratta Blocco,Perchè mi dà errore?Poi se nella classe Blocco, inserisco la seguente dichiarazione :abstract class Blocco implements Comparable<Blocco>,il compilatore mi dà errore perche?