Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    [JAVA] Errore utilizzo super()

    codice:
    class Poligono{
    	int num_lati;
    
    	Poligono (int numlati) { 
    		num_lati i=numlati;
    		System.out.println("poligono: Numero Lati " + num_lati);
    	}
    
    class Quadrato extends Poligono {
    	int lunghezza;
    	Quadrato() {
    		super(4);
    		this(1);
    	}
    
    	Quadrato (int lunghezza) {
    		super(4);
    		this.lunghezza=lunghezza;
    		System.out.println("Quadrato: Numero Lati " + num_lati);
    	}
    }
    	
    public static void main (String[] args) {
    	Quadrato q = new Quadrato(5);
    	}
    }
    Ragazzi qualcuno può dirmi perchè precisamente dà errore di compilazione?
    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    In primis per questo: num_lati i=numlati.
    E poi perchè this() deve essere la prima chiamata...o this, o super. Questo mi fa pensare che non sai che cambia tra i due...

    Comunque la situazione che stai mostrando è... ambigua ed inutile direi. Scopo didattico o altro?
    Mi riferisco al fatto che non puoi istanziare in quel modo Quadrato.

  3. #3
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Si è a scopo didattico, per quanto riguarda:

    num_lati i=numlati; => errore di battitura.

    super(4) chiama il costruttore della superclasse e gli passa 4,
    this(1) richiama un costruttore all'interno di un altro costruttore, precisamente Quadrato(int lunghezza), all'interno del quale c'è ancora super(4), e questo porta all'errore poichè tento di chiamare due volte il costruttore della superclasse. Mi ha detto un amico che è giusto mettere super, nel costruttore che ha il maggior numero dei parametri e i rispettivi this nei costruttori con un numero minore di parametri.

    Inoltre:

    codice:
    System.out.println("Quadrato: Numero Lati " + num_lati);
    Questo dà errore ( num_lati non è un attributo della classe quadrato, ma bensì di Poligono).
    Con i sogni possiamo conoscere il futuro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Che cosa richiedeva l'esercizio? Questo codice l'hai scritto tu?


    super(4) chiama il costruttore della superclasse e gli passa 4,
    Ok, questo non è scorretto.

    this(1) richiama un costruttore all'interno di un altro costruttore, precisamente Quadrato(int lunghezza), all'interno del quale c'è ancora super(4), e questo porta all'errore poichè tento di chiamare due volte il costruttore della superclasse.
    L'errore this() lo da perchè non è la prima condizione di quel codice. Se dal costruttore senza parametri togli il super(), allora funziona in quanto this(1) richiama il costruttore della stessa classe che ha un parametro di tipo corrispondente.


    Mi ha detto un amico che è giusto mettere super, nel costruttore che ha il maggior numero dei parametri e i rispettivi this nei costruttori con un numero minore di parametri.
    Si, è così se ti serve dare ad alcuni parametri un determinato valore iniziale, ed anche per evitare di scrivere 100 volte le stesse cose.

    num_lati è di Poligono, ma non dovrebbe dare alcun errore in quanto è accessibile. Che non capisco è perchè far estendere ad una classe interna la classe che la contiene.

  5. #5
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    L'esercizio chiede quale sia l'output

    1) errore a tempo di compilazione
    2) errore a tempo di esecuzione
    ..
    ..
    e la risposta credo sia la 1.

    Invece se avessi:

    codice:
    Quadrato() {
    this(1);
    super(4);
    }
    
    Quadrato(int lunghezza) {
    super(3);
    }
    avrei comunque un errore di compilazione?

    P.S il mio amico mi ha detto anche che this non va mai usato insieme a super ...
    Con i sogni possiamo conoscere il futuro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da gaten
    L'esercizio chiede quale sia l'output

    1) errore a tempo di compilazione
    2) errore a tempo di esecuzione
    ..
    ..
    e la risposta credo sia la 1.
    La risposta è sicuramente la 1.
    Se il codice è quello che hai postato, e non l'hai modificato per fare eventuali prove, gli errori sono anche molti.

    Invece se avessi:

    codice:
    Quadrato() {
    this(1);
    super(4);
    }
    
    Quadrato(int lunghezza) {
    super(3);
    }
    avrei comunque un errore di compilazione?
    Certo! L'errore è dato dal fatto che super(4) deve essere la prima riga di codice di un costruttore; quindi o utilizzi this() o utilizzi super().
    Specie perchè con this() richiami un costruttore della stessa classe, che a sua volta può chiamare super().

    P.S il mio amico mi ha detto anche che this non va mai usato insieme a super ...
    Si, anche perchè come ho detto li sopra, non avrebbe senso utilizzarli nello stesso costruttore...
    L'altro errore è dato da Quadrato.

  7. #7
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Mi parli degli altri errori sul codice (comunque non ho modificato nulla) il codice è utilizzato a scopo didattico
    Con i sogni possiamo conoscere il futuro...

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Scusa, giusto per curiosità, tutti questi esempi che hai postato oggi e
    che dici ti hanno dato "a scopo didattico", dove stanno? su un libro? su delle dispense? in rete?

  9. #9
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    semplicemente su foglio
    Con i sogni possiamo conoscere il futuro...

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    su foglio vuol dire non su libro? sono delle dispense? sono tuoi appunti?

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.