Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [JAVA] Errore in compilazione

    codice:
    class A {
      int a=0;
      public A() {
        a = getCampo();
      }
      
      public int getCampo() {
        return ++a;
      }
    }
    
    class B extends A {
      int b=0;
      public B() {
        b = getCampo();
      }
    }
    
    ...main...
    B obj = new B();
    System.out.println("a = " + obj.a + " b = " + obj.b);
    A obj = new B();
    System.out.println("a = " + obj.a + " b = " + obj.b);
    Ciao,
    qualcuno sa dirmi il perchè se l'oggetto ha riferimento B compila mentre quando ha riferimento A non compila?
    Grazie Ciao

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Errore in compilazione

    Originariamente inviato da djdan8787
    qualcuno sa dirmi il perchè se l'oggetto ha riferimento B compila mentre quando ha riferimento A non compila?
    Tramite un reference ad 'A' non puoi "vedere" la variabile di istanza 'b'. Questo nonostante l'oggetto reale sia di tipo 'B'.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie...
    Ma in ogni caso è sempre così?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da djdan8787
    Ma in ogni caso è sempre così?
    Sì.
    Il compilatore si basa solo sul tipo del reference (e non sul tipo dell'oggetto realmente istanziato) per stabilire quale variabile di istanza (o di classe) o quale metodo (tra quelli eventualmente in overload) usare.
    È poi a runtime che può entrare in gioco la questione del override.

    codice:
    class A {
        public void stampa () {
            System.out.println ("stampa in A");
        }
    }
    
    class B extends A {
        public void stampa () {
            System.out.println ("stampa in B");
        }
    }
    Sia che tu faccia:
    A x = new B();
    x.stampa ();

    oppure:
    B x = new B();
    x.stampa ();

    viene stampato in entrambi i casi "stampa in B". Questo perché entra in gioco l'override in B del metodo stampa().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ok grazie di tutto domani esame

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.