Domanda ereditarietà java tra persona e studente

sara20

Utente Silver
6 Febbraio 2020
116
29
1
54
buon pomeriggio volevo chiarirmi un dubbio ho ciò:

Java:
public class Persona1{
    
    
    private String Nome;
    private String Cognome;
    
    
    public String getNome() {
        return Nome;
    }
    public void setNome(String nome) {
        Nome = nome;
    }
    public String getCognome() {
        return Cognome;
    }
    public void setCognome(String cognome) {
        Cognome = cognome;
    

    }
}

Codice:
public class Started {

    public static void main(String[] args) {
        

      Persona1 p = new Persona1();

            p.setNome("Mario");
            p.setCognome("Rossi");

      Studente s = new Studente(null);

            s.setNome("Marco");
            s.setCognome("Verdi");
            s.setMatricola("1234BGF");

System.out.println("Persona "+ p.getNome() + " " + p.getCognome());

System.out.println("Studente "+ s.getNome() + " " + s.getCognome() + " " + s.getMatricola());

   }
}

Codice:
public class Studente extends Persona1 {
    

    private String Matricola;

    

    public String getMatricola() {
        return Matricola;
    }



    public void setMatricola(String matricola) {
        Matricola = matricola;
    }



    public Studente(String matricola) {
        super();
        Matricola = matricola;
    }


}

perchè quando scrivo:
Studente s = new Studente("Marco","Verdi","123BGF");
mi da errore sapete come posso risolvere?
 
Perche' il costruttore di studente accetta un solo argomento: matricola. Per avere il risultato desiderato con quell'inizializzazione ti serve:
Java:
public Studente(String nome, String cognome, String matricola)
{
    super();
    Matricola = matricola;
    setNome(nome);
    setCognome(cognome);
    // non puoi settarli direttamente perche' sono private e non protected (o public)
}

Giusto per fare capire, non e' l'approccio migliore, la classe Persona dovrebbe avere i membri protected cosi' da essere usati senza getter e setter da chi la eredita (Studente). Poi dovresti anche prevedere un costruttore senza parametri per Studente, cosi' se si vuole inizializzare e popolare in parti si puo' fare senza chiamarla con null, null, null come visto nel tuo esempio.
 
Perche' il costruttore di studente accetta un solo argomento: matricola. Per avere il risultato desiderato con quell'inizializzazione ti serve:
Java:
public Studente(String nome, String cognome, String matricola)
{
    super();
    Matricola = matricola;
    setNome(nome);
    setCognome(cognome);
    // non puoi settarli direttamente perche' sono private e non protected (o public)
}

Giusto per fare capire, non e' l'approccio migliore, la classe Persona dovrebbe avere i membri protected cosi' da essere usati senza getter e setter da chi la eredita (Studente). Poi dovresti anche prevedere un costruttore senza parametri per Studente, cosi' se si vuole inizializzare e popolare in parti si puo' fare senza chiamarla con null, null, null come visto nel tuo esempio.
ah ok protected ancora non l'ho fatto io nell'esempio sopra volevo eliminare null in questa linea:
Studente s = new Studente(null);
Messaggio unito automaticamente:

ah ok protected ancora non l'ho fatto io nell'esempio sopra volevo eliminare null in questa linea:
Studente s = new Studente(null);
in realtà il prof mi ha detto che meglio utilizzare get anziché protected
 
Lo stato dell'oggetto dev'essere sempre valido. Il paradigma object-oriented è più astratto rispetto a quello procedurale che hai visto in C e queste cose
Java:
Persona1 p = new Persona1(); 
p.setNome("Mario"); 
p.setCognome("Rossi");
Java:
Studente s = new Studente(null);
Java:
Studente s = new Studente();
in teoria sono sbagliate: errori per il professore, ma non errori per il compilatore e non errori per il programma. Concettualmente parlando, una persona senza nome e cognome non dove proprio esistere (idem per lo studente senza numero di matricola).

La programmazione object oriented ti permette di dire "se non mi dai gli strumenti per creare l'oggetto, io l'oggetto non te lo creo". L'idea di creare qualcosa di rotto (e.g., una persona senza nome) che poi sistemerai nelle righe di codice sottostante è ammissibile via codice ma concettualmente sbagliata.
 
Lo stato dell'oggetto dev'essere sempre valido. Il paradigma object-oriented è più astratto rispetto a quello procedurale che hai visto in C e queste cose

in teoria sono sbagliate: errori per il professore, ma non errori per il compilatore e non errori per il programma. Concettualmente parlando, una persona senza nome e cognome non dove proprio esistere (idem per lo studente senza numero di matricola).

La programmazione object oriented ti permette di dire "se non mi dai gli strumenti per creare l'oggetto, io l'oggetto non te lo creo". L'idea di creare qualcosa di rotto (e.g., una persona senza nome) che poi sistemerai nelle righe di codice sottostante è ammissibile via codice ma concettualmente sbagliata.
come posso risolvere??
 
Risolvi nel modo che ti ha segnalato JunkCoder, creando un costruttore per Persona (lui ti ha fatto vedere come farlo per Studente) che richiede due parametri: una stringa per il nome e una stringa per il cognome.

Prova da sola e postaci il tuo tentativo, almeno capiamo cosa hai capito e cosa non hai capito.
 
Lo stato dell'oggetto dev'essere sempre valido. Il paradigma object-oriented è più astratto rispetto a quello procedurale che hai visto in C e queste cose

in teoria sono sbagliate: errori per il professore, ma non errori per il compilatore e non errori per il programma. Concettualmente parlando, una persona senza nome e cognome non dove proprio esistere (idem per lo studente senza numero di matricola).

La programmazione object oriented ti permette di dire "se non mi dai gli strumenti per creare l'oggetto, io l'oggetto non te lo creo". L'idea di creare qualcosa di rotto (e.g., una persona senza nome) che poi sistemerai nelle righe di codice sottostante è ammissibile via codice ma concettualmente sbagliata.
OK ho provato così
Java:
public class Persona1{
  
  
    private String Nome;
    private String Cognome;
  
  
    public String getNome() {
        return Nome;
    }
    public void setNome(String nome) {
        Nome = nome;
    }
    public String getCognome() {
        return Cognome;
    }
    public void setCognome(String cognome) {
        Cognome = cognome;
      
    }
  

    public Persona1()
    {
        super();
        setNome(Nome);
        setCognome(Cognome);
    }

public Persona1() {

    }
   
}
Java:
public class Started {

    public static void main(String[] args) {
      

      Persona1 p = new Persona1("Matteo","Rossi","1234BOI");

        

      Studente s = new Studente("Marco","Verdi","1234BGF");


System.out.println("Persona "+ p.getNome() + " " + p.getCognome());

System.out.println("Studente "+ s.getNome() + " " + s.getCognome() + " " + s.getMatricola());

   }
}
Java:
public class Studente extends Persona1 {
  

    private String Matricola;

  

    public String getMatricola() {
        return Matricola;
    }



    public void setMatricola(String matricola) {
        Matricola = matricola;
    }



  
    public Studente(String nome, String cognome, String matricola)
    {
      //  super();
        Matricola = matricola;
        setNome(nome);
        setCognome(cognome);
    }


}
Mi funziona ma è corretto fare così o ci sono ancora errori?
 
Hai fatto proprio lo stretto indispensabile per farti aiutare, però vabbé...

Java:
public Persona1() { 
    super(); 
    setNome(Nome); 
    setCognome(Cognome); 
}
Stai cercando di impostare un nome e un cognome a una persona, ma il metodo persona non prevede di essere chiamato con due parametri di tipo stringa (per come l'hai scritto, prevede di essere chiamato senza parametri). Il super in questo caso non ti serve: JunkCoder lo usava perché ogni studente prima di tutto una persona, quindi voleva chiamare il costruttore di Persona anche dentro Studente. Nel tuo caso Persona non ha nessun extends, quindi è del tutto inutile.

Ti propongo questa soluzione che non è proprio quello che stavi facendo, ma mi permette di farti vedere delle cose nuove.
Java:
public class Persona {
    // public & final: pubblici (accessibili da tutti) e immutabili (non modificabili)
    public final String nome;
    public final String cognome;
    
    // una persona per esistere deve avere nome e cognome
    public Persona(String nome, String cognome) {
        this.nome = nome;       // final: una volta che gli assegni un nome, quello rimane
        this.cognome = cognome; // anche il cognome è final: si assegna una volta e non si modifica più
    }

    // una persona può essere convertita in stringa mostrando le sue credenziali
    public String toString() {
        return "Nome: " + nome + "\nCognome: " + cognome;
    }
}

// uno studente è (extends: estende le funzionalità) una persona
public class Studente extends Persona {
    public final String matricola;

    // uno studente per esistere deve avere nome, cognome e matricola
    public Studente(String nome, String cognome, String matricola) {
        super(nome, cognome);  // creo la Persona associata allo studente
        this.matricola = matricola; // gli assegno il nome di matricola
    }

    // uno studente può essere convertito in stringa mostrando le sue credenziali
    public String toString() {
        return "Nome: " + nome + "\nCognome: " + cognome + "\nMatricola: " + matricola;
    }
}

public class Started {
    public static void main(String[] args) {
        // una persona è una persona
        Persona matteo = new Persona("Matteo", "Rossi");

        // è proibito creare cose che non vanno bene
        // 1) Persona stefano = new Persona("Stefano"); è un errore in compilazione (non ha un cognome)
        // 2) Persona sara = new Persona(); è un errore in compilazione (non ha né il nome e né il cognome)

        // uno studente, oltre ad essere uno studente, è anche una persona
        Persona marco = new Studente("Marco", "Verdi", "1234BGF");
        // nota: Studente marco = .... andava bene comunque

        System.out.println(matteo);
        System.out.println();
        System.out.println(marco);
   }
}

L'ho scritto per farti capire dei concetti (che magari non hai ancora studiato) e non per darti esattamente ciò che chiedi. Ho commentato in dettaglio, ma se non capisci qualcosa chiedi pure.
 
Ultima modifica:
Hai fatto proprio lo stretto indispensabile per farti aiutare, però vabbé...


Stai cercando di impostare un nome e un cognome a una persona, ma il metodo persona non prevede di essere chiamato con due parametri di tipo stringa (per come l'hai scritto, prevede di essere chiamato senza parametri). Il super in questo caso non ti serve: JunkCoder lo usava perché ogni studente prima di tutto una persona, quindi voleva chiamare il costruttore di Persona anche dentro Studente. Nel tuo caso Persona non ha nessun extends, quindi è del tutto inutile.

Ti propongo questa soluzione che non è proprio quello che stavi facendo, ma mi permette di farti vedere delle cose nuove.
Java:
public class Persona {
    // public & final: pubblici (accessibili da tutti) e immutabili (non modificabili)
    public final String nome;
    public final String cognome;
  
    // una persona per esistere deve avere nome e cognome
    public Persona(String nome, String cognome) {
        this.nome = nome;       // final: una volta che gli assegni un nome, quello rimane
        this.cognome = cognome; // anche il cognome è final: si assegna una volta e non si modifica più
    }

    // una persona può essere convertita in stringa mostrando le sue credenziali
    public String toString() {
        return "Nome: " + nome + "\nCognome: " + cognome;
    }
}

// uno studente è (extends: estende le funzionalità) una persona
public class Studente extends Persona {
    public final String matricola;

    // uno studente per esistere deve avere nome, cognome e matricola
    public Studente(String nome, String cognome, String matricola) {
        super(nome, cognome);  // creo la Persona associata allo studente
        this.matricola = matricola; // gli assegno il nome di matricola
    }

    // uno studente può essere convertito in stringa mostrando le sue credenziali
    public String toString() {
        return "Nome: " + nome + "\nCognome: " + cognome + "\nMatricola: " + matricola;
    }
}

public class Started {
    public static void main(String[] args) {
        // una persona è una persona
        Persona matteo = new Persona("Matteo", "Rossi");

        // è proibito creare cose che non vanno bene
        // 1) Persona stefano = new Persona("Stefano"); è un errore in compilazione (non ha un cognome)
        // 2) Persona sara = new Persona(); è un errore in compilazione (non ha né il nome e né il cognome)

        // uno studente, oltre ad essere uno studente, è anche una persona
        Persona marco = new Studente("Marco", "Verdi", "1234BGF");
        // nota: Studente marco = .... andava bene comunque

        System.out.println(matteo);
        System.out.println();
        System.out.println(marco);
   }
}

L'ho scritto per farti capire dei concetti (che magari non hai ancora studiato) e non per darti esattamente ciò che chiedi. Ho commentato in dettaglio, ma se non capisci qualcosa chiedi pure.
mah ho fatto così perchè non ho ancora fatto this, toString,super...e poi il mio scopo era quello di far eseguire il "codice" con metodi privati usando get...vabbè grazie lo stesso
Messaggio unito automaticamente:

Hai fatto proprio lo stretto indispensabile per farti aiutare, però vabbé...


Stai cercando di impostare un nome e un cognome a una persona, ma il metodo persona non prevede di essere chiamato con due parametri di tipo stringa (per come l'hai scritto, prevede di essere chiamato senza parametri). Il super in questo caso non ti serve: JunkCoder lo usava perché ogni studente prima di tutto una persona, quindi voleva chiamare il costruttore di Persona anche dentro Studente. Nel tuo caso Persona non ha nessun extends, quindi è del tutto inutile.

Ti propongo questa soluzione che non è proprio quello che stavi facendo, ma mi permette di farti vedere delle cose nuove.
Java:
public class Persona {
    // public & final: pubblici (accessibili da tutti) e immutabili (non modificabili)
    public final String nome;
    public final String cognome;
   
    // una persona per esistere deve avere nome e cognome
    public Persona(String nome, String cognome) {
        this.nome = nome;       // final: una volta che gli assegni un nome, quello rimane
        this.cognome = cognome; // anche il cognome è final: si assegna una volta e non si modifica più
    }

    // una persona può essere convertita in stringa mostrando le sue credenziali
    public String toString() {
        return "Nome: " + nome + "\nCognome: " + cognome;
    }
}

// uno studente è (extends: estende le funzionalità) una persona
public class Studente extends Persona {
    public final String matricola;

    // uno studente per esistere deve avere nome, cognome e matricola
    public Studente(String nome, String cognome, String matricola) {
        super(nome, cognome);  // creo la Persona associata allo studente
        this.matricola = matricola; // gli assegno il nome di matricola
    }

    // uno studente può essere convertito in stringa mostrando le sue credenziali
    public String toString() {
        return "Nome: " + nome + "\nCognome: " + cognome + "\nMatricola: " + matricola;
    }
}

public class Started {
    public static void main(String[] args) {
        // una persona è una persona
        Persona matteo = new Persona("Matteo", "Rossi");

        // è proibito creare cose che non vanno bene
        // 1) Persona stefano = new Persona("Stefano"); è un errore in compilazione (non ha un cognome)
        // 2) Persona sara = new Persona(); è un errore in compilazione (non ha né il nome e né il cognome)

        // uno studente, oltre ad essere uno studente, è anche una persona
        Persona marco = new Studente("Marco", "Verdi", "1234BGF");
        // nota: Studente marco = .... andava bene comunque

        System.out.println(matteo);
        System.out.println();
        System.out.println(marco);
   }
}

L'ho scritto per farti capire dei concetti (che magari non hai ancora studiato) e non per darti esattamente ciò che chiedi. Ho commentato in dettaglio, ma se non capisci qualcosa chiedi pure.
Scusa quindi scrivere:
Persona1 p = new Persona1("Mario","Rossi");

non è corretto?
 
Mi fa sempre sorridere la cosa del "non ho ancora fatto". Quando ancora studiavo, consegnavo al prof cose che nemmeno sarebbe arrivato a spiegare in tutto il programma. Non vedo perche' se sai una cosa non puoi farla, specialmente se riesci a mantenere la consegna dell'esercizio. E non parlo di copia incolla che ovviamente poi capirebbe subito che non hai fatto tu alla prima domanda, ma forse e' quello il problema. Se capissi veramente a pieno il codice di Steve (che e' chiaro e ampiamente commentato) potresti modificarlo e portarlo tranquillamente senza temere domande.
Altrimenti devo pensare che hai scambiato inforge per "esercizi gratis senza capire un tubo" visto anche che su i tuoi 96 post, 96 sono sui tuoi esercizi.
 
Ultima modifica:
Mi fa sempre sorridere la cosa del "non ho ancora fatto". Quando ancora studiavo, consegnavo al prof cose che nemmeno sarebbe arrivato a spiegare in tutto il programma. Non vedo perche' se sai una cosa non puoi farla, specialmente se riesci a mantenere la consegna dell'esercizio. E non parlo di copia incolla che ovviamente poi capirebbe subito che non hai fatto tu alla prima domanda, ma forse e' quello il problema. Se capissi veramente a pieno il codice di Steve (che e' chiaro e ampiamente commentato) potresti modificarlo e portarlo tranquillamente senza temere domande.
Altrimenti devo pensare che hai scambiato inforge per "esercizi gratis senza capire un tubo" visto anche che su i tuoi 96 post, 96 sono sui tuoi esercizi.
no aspetta ma non è un compito da mandare al professore ma a lezione ha detto che nel caso le variabili di una superasse sono private è possibile accedere a esse utilizzando get ed era mia curiosità vedere cosa succedere nel caso in cui le variabili sono private
 
no aspetta ma non è un compito da mandare al professore ma a lezione ha detto che nel caso le variabili di una superasse sono private è possibile accedere a esse utilizzando get ed era mia curiosità vedere cosa succedere nel caso in cui le variabili sono private
Okay, questo contesto ci aiuta a capire cosa stavi cercando di fare: ti hanno spiegato i getter e i setter e stavi facendo qualche esperimento per capire meglio cosa sono, perché esistono e quando utili o inutili. Nel fare questi esperimenti ti sei accorta di avere qualche dubbio sul funzionamento dei costruttori. Giusto?

Nella programmazione object-oriented creiamo dei tipi astratti (e.g. il tipo Studente). Questi tipi sono caratterizzati da dei campi (e.g., nome, cognome e matricola) e da dei metodi (e.g., iscriviAlCorso). I campi descrivono lo stato dell'oggetto (i.e., com'è fatto in questo momento) mentre i metodi descrivono le azioni che può svolgere. Tra i vari metodi ce n'è uno speciale, chiamato costruttore, che implementa l'azione di creare un oggetto e viene chiamato automaticamente nel momento in cui usiamo l'operatore new. Con
Java:
public class Persona {
    private String nome;
    private String cognome;
    
    public Persona(String nome, String cognome) {
        this.nome = nome;
        this.cognome = cognome;
    }
}
stiamo descrivendo l'oggetto persona con due campi (nome e cognome); il costruttore specifica che per creare un oggetto persona hai bisogno di specificare due parametri: nome e cognome.

Se non creiamo nessun costruttore (come hai fatto te), java ne scrive uno al posto nostro che non prende nessun parametro. Quindi se scriviamo
Java:
public class Persona {
    private String nome;
    private String cognome;
    
    // public Persona() {}
}
java scrive al posto nostro il costruttore che io ho scritto commentato. Se scriviamo noi un costruttore, java non scrive il costruttore di default.

Cosa succede se scriviamo Persona p = new Persona("Mario", "Rossi");?
  1. il primo codice che ho scritto funziona, perché il costruttore si aspetta due parametri di tipo stringa (i.e., il nome e il cognome) e noi glieli stiamo dando;
  2. nel secondo codice che ho scritto abbiamo un errore in fase di compilazione, perché non c'è nessun costruttore che si aspetta questi due parametri.

Cosa succede se scriviamo Persona p = new Persona();?
  1. nel primo codice che ho scritto abbiamo un errore in fase di compilazione, perché non esiste nessun costruttore che si aspetta zero parametri;
  2. il secondo codice che ho scritto funziona, perché java ha inserito il costruttore di default che effettivamente che è definito con zero parametri.
Cosa facciamo se vogliamo fare entrambe le cose? Scriviamo due costruttori
Java:
public class Persona {
    private String nome;
    private String cognome;

    public Persona() { /* costruttore vuoto */ }

    public Persona(String nome, String cognome) {
        this.nome = nome;
        this.cognome = cognome;
    }
}

La mia obiezione precedente dovrebbe farti capire per quale motivo java non scrive un costruttore di default se il programmatore ne ha esplicitamente scritto uno: questo meccanismo esiste perché certi oggetti (e.g., una persona senza nome) sono completamente illogici e non dovrebbero mai esistere. Nella programmazione object-oriented vogliamo mantenere uno stato consistente, quindi se non ha senso avere una persona senza nome allora non ti do nemmeno la possibilità di crearla. È un meccanismo di sicurezza, un po' come public e private: non mettiamo tutto public (anzi, usiamo private il più possibile!), complicandoci la vita, per prevenire errori. Non mi metto a spiegare getter/setter e public/private visto che nessuno me l'ha chiesto, ma quanto ho scritto dovrebbe chiarire il tuo dubbio iniziale. Altrimenti boh... facci capire cosa non hai capito e vediamo se riusciamo a chiarirti il dubbio.

Non ci biasimare se ogni tanto ti facciamo notare che il tuo contributo alla community self-centered e la quasi totalità dei tuoi post suona come do my homework asap... anche considerando reposti su più forum come per massimizzare il profitto. Non sei obbligata a partecipare alla community così come noi non siamo obbligati a risponderti. Quando rispondiamo, lo facciamo volentieri ;) chiaro che è più piacevole dare una spiegazione discutere su quella piuttosto che risolvere gli errori.
 
  • Mi piace
Reazioni: sara20
Okay, questo contesto ci aiuta a capire cosa stavi cercando di fare: ti hanno spiegato i getter e i setter e stavi facendo qualche esperimento per capire meglio cosa sono, perché esistono e quando utili o inutili. Nel fare questi esperimenti ti sei accorta di avere qualche dubbio sul funzionamento dei costruttori. Giusto?

Nella programmazione object-oriented creiamo dei tipi astratti (e.g. il tipo Studente). Questi tipi sono caratterizzati da dei campi (e.g., nome, cognome e matricola) e da dei metodi (e.g., iscriviAlCorso). I campi descrivono lo stato dell'oggetto (i.e., com'è fatto in questo momento) mentre i metodi descrivono le azioni che può svolgere. Tra i vari metodi ce n'è uno speciale, chiamato costruttore, che implementa l'azione di creare un oggetto e viene chiamato automaticamente nel momento in cui usiamo l'operatore new. Con
Java:
public class Persona {
    private String nome;
    private String cognome;
  
    public Persona(String nome, String cognome) {
        this.nome = nome;
        this.cognome = cognome;
    }
}
stiamo descrivendo l'oggetto persona con due campi (nome e cognome); il costruttore specifica che per creare un oggetto persona hai bisogno di specificare due parametri: nome e cognome.

Se non creiamo nessun costruttore (come hai fatto te), java ne scrive uno al posto nostro che non prende nessun parametro. Quindi se scriviamo
Java:
public class Persona {
    private String nome;
    private String cognome;
  
    // public Persona() {}
}
java scrive al posto nostro il costruttore che io ho scritto commentato. Se scriviamo noi un costruttore, java non scrive il costruttore di default.

Cosa succede se scriviamo Persona p = new Persona("Mario", "Rossi");?
  1. il primo codice che ho scritto funziona, perché il costruttore si aspetta due parametri di tipo stringa (i.e., il nome e il cognome) e noi glieli stiamo dando;
  2. nel secondo codice che ho scritto abbiamo un errore in fase di compilazione, perché non c'è nessun costruttore che si aspetta questi due parametri.

Cosa succede se scriviamo Persona p = new Persona();?
  1. nel primo codice che ho scritto abbiamo un errore in fase di compilazione, perché non esiste nessun costruttore che si aspetta zero parametri;
  2. il secondo codice che ho scritto funziona, perché java ha inserito il costruttore di default che effettivamente che è definito con zero parametri.
Cosa facciamo se vogliamo fare entrambe le cose? Scriviamo due costruttori
Java:
public class Persona {
    private String nome;
    private String cognome;

    public Persona() { /* costruttore vuoto */ }

    public Persona(String nome, String cognome) {
        this.nome = nome;
        this.cognome = cognome;
    }
}

La mia obiezione precedente dovrebbe farti capire per quale motivo java non scrive un costruttore di default se il programmatore ne ha esplicitamente scritto uno: questo meccanismo esiste perché certi oggetti (e.g., una persona senza nome) sono completamente illogici e non dovrebbero mai esistere. Nella programmazione object-oriented vogliamo mantenere uno stato consistente, quindi se non ha senso avere una persona senza nome allora non ti do nemmeno la possibilità di crearla. È un meccanismo di sicurezza, un po' come public e private: non mettiamo tutto public (anzi, usiamo private il più possibile!), complicandoci la vita, per prevenire errori. Non mi metto a spiegare getter/setter e public/private visto che nessuno me l'ha chiesto, ma quanto ho scritto dovrebbe chiarire il tuo dubbio iniziale. Altrimenti boh... facci capire cosa non hai capito e vediamo se riusciamo a chiarirti il dubbio.

Non ci biasimare se ogni tanto ti facciamo notare che il tuo contributo alla community self-centered e la quasi totalità dei tuoi post suona come do my homework asap... anche considerando reposti su più forum come per massimizzare il profitto. Non sei obbligata a partecipare alla community così come noi non siamo obbligati a risponderti. Quando rispondiamo, lo facciamo volentieri ;) chiaro che è più piacevole dare una spiegazione discutere su quella piuttosto che risolvere gli errori.
okay quindi anche in studente abbiamo entrambi i costruttori giusto?