Il codice che hai riportato ha un problema (e difatti il compilatore se ne accorge e ti segnala un errore): il costruttore che riceve un "int" richiama il costruttore che riceve una "String", e viceversa.
E' una situazione ricorsiva, che se eseguita porterebbe ad un loop (A chiama B, che chiama A, che chiama B, ecc.). Una soluzione migliore è:
in cui entrambi i costruttori fanno riferimento a quello che riceve entrambi i parametri.codice:class persone { // Proprietà public int annodinascita; public String Cognome=new String(); // Costruttori public persone(int annonascita) { this(annonascita, "Non Conosco"); } public persone(String Cognome) { this(0, Cognome); } public persone(int annonascita , String Cognome) { annodinascita = annonascita; this.Cognome = Cognome; } // Metodo che calcola l'età del soggetto public int calcolaeta (int annoattuale) { return (annoattuale - annodinascita); } }
Come dici tu, scopo primario dei costruttori è dare un valore di "default" alle variabili di un oggetto appena creato.
Per risponderti:
1) ai costruttori devi passare il valore della variabile che vuoi utilizzare per l'inizializzazione che, all'interno del codice, sarà utilizzabile tramite l'identificatore che hai dichiarato (nel tuo caso "annonascita" e "Cognome")
2) il codice che ti ho postato dovrebbe risponderti da solo: l'inizializzazione avviene nel costruttore "int, String"

Rispondi quotando