Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]implementazione classi astratte

    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?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    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?
    Se metti solo

    .... implements Comparable

    allora devi avere un

    int compareTo(Object o)

    non puoi mettere Blocco come parametro!


    Se invece metti:

    .... implements Comparable<Blocco>

    allora devi avere

    int compareTo(Blocco b)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    Ma vale anche se la classe ed il metodo sono astratti?Perchè il compilatore mi dà lo stesso un errore: compareTo(Blocco) in Blocco cannot implement compareTo(T) in java.lang.Comparable; attempting to assign weaker access privileges; was public
    abstract int compareTo(Blocco b);


    quindi vuol dire che il metodo compareTo(T o) può essere solo pubblico?

  4. #4
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    devi rispettare la segnatura del metodo descritto nell'interfaccia. Se il metodo nell'interfaccia e` public, come in questo caso, quando lo implementi deve essere ancora public. Nella tua classe astratta invece ometti il modificatore di visibilita`, dichiarando implicitamente il metodo come default (visibile solo all'interno dello stesso package), che e` diverso da public (visibile ovunque).

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    Ma vale anche se la classe ed il metodo sono astratti?
    Se Blocco è abstract e non vuoi fornire un compareTo predefinito, potresti anche ometterlo del tutto. Non c'è alcun vicolo, essendo la classe abstract.

    Quote Originariamente inviata da el92 Visualizza il messaggio
    quindi vuol dire che il metodo compareTo(T o) può essere solo pubblico?
    I metodi delle interfacce sono implicitamente e solo "public" e nel override non puoi restringere il livello di accesso. Quindi i metodi implementanti dovranno per forza essere public.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.