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

    Sequenza di elaborazione metodi di classi in gerarchia

    Salve, vorrei cercare di non imparare a memoria quello che succede nel seguente codice:
    codice:
    class A {
    	public A() {
    		System.out.print("A ");
    	}
    }
    
    
    class B extends A {
    	public B() {
    		System.out.print("B ");
    	}
    }
    
    
    public class C extends B {
    	public C() {
    		System.out.print("C ");
    	}
    	public static void main(String args[]) {
    		C c = new C();
    	}
    }
    A me viene da pensare che l'output sia C B A, invece è A B C.
    E' dovuto al fatto che, proprio nel leggere il flusso di codice, C estende B (e B estende A) prima di entrare nel merito dei loro costruttori?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    La classe madre viene sempre istanziata per prima.
    Se in costruttore non scrivi tu la chiamata al costruttore di una superclasse come prima istruzione, allora o la classe madre ha un costruttore accessibile alla classe figlia senza alcun argomento (che viene implicitamente richiamato) o ottieni un errore in compilazione (a meno che non richiami con this un costruttore della stessa classe, ma prima o poi dovrai chiamare un super costruttore).

  3. #3
    In questo caso ho i costruttori in ogni classe, che sovrascrivono quello di default (senza argomenti) aggiungendo un println()...
    Però mi aspettavo un output A B C se avessi inserito come prima istruzione del costruttore super(). Quindi super() è invocato implicitamente in questi casi, e si risale fino a class A in maniera iterativa?

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Esatto, i vari super sono chiamati implicitamente, e ad essere pignoli risali ancora più su fino a Object prima di arrivare al println

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.