Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    55

    Errore a tempo di compilazione: perché?

    Salve a tutti, ho bisogno di una mano con questo esercizio in quanto non riesco a capire perché da errore di compilazione piuttosto che 134.

    codice:
    class X {
        X(int i) { 
           System.out.print(1);
        } 
    }
    class Y extends X {     
       Y(){
            super(2);         
           System.out.print(3);
        }     
       Y(int i) { }
    }
    class Z extends Y {
        Z(int i) {         
          System.out.print(4);
        }     
       Z(double d) {
            this(5);         
           System.out.print(6);
        }
        public static void main(String[] args){         
              new Z(7);
        } 
    }
    L'esecuzione dovrebbe essere:
    instanzio Z(7) quindi chiamo il costruttore Z(int i) che a sua volta chiamerà il costruttore Y() che a sua volta chiamerà X(int i) e di conseguenza, in cascata, l'output dovrebbe essere 134
    dove potrebbe essere l'errore?
    Grazie in anticipo!

  2. #2
    Per X non ha un costruttore di default, quindi in tutti i costruttori di Y devi chiamare esplicitamente il costruttore di X:
    codice:
    class X {    X(int i) {
            System.out.print(1);
    }
    }
    class Y extends X {
        Y(){
            super(2);
    System.out.print(3);
    }
        Y(int i) {
            super(i);
    }
    }
    class Z extends Y {
        Z(int i) {
            System.out.print(4);
    }
        Z(double d) {
            this(5);
    System.out.print(6);
    }
        public static void main(String[] args){
            new Z(7);
    }
    }
    Ultima modifica di codicenativo; 10-07-2018 a 20:22

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Lodin Visualizza il messaggio
    non riesco a capire perché da errore di compilazione
    Il costruttore

    Y(int i) { }

    scritto così "sembra" vuoto ma bisogna sempre ricordare che la PRIMA istruzione di un costruttore deve essere una invocazione this() o super() con o senza argomenti.
    Se non c'è una di queste due in modo esplicito, il compilatore mette per default una invocazione super() (senza argomenti).

    In X (la superclasse) però NON c'è un costruttore senza argomenti. Quindi, errore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    55
    Ah giusto! in tutti i costruttori, che vengano poi effettivamente utilizzati o meno, c'è la chiamata super al costruttore della superclasse e quindi da errore.

    Grazie mille siete stati gentilissimi!
    Ultima modifica di Lodin; 10-07-2018 a 21:15

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 © 2024 vBulletin Solutions, Inc. All rights reserved.