Vi posto il codice della classe principale:
Codice sorgente

codice:
    abstract class Messaggio {
            protected String mittente;
            protected String destinatario;
            protected String data;
            protected String ora;
           
            //costruttori
            public void impostaMittente(String mittente) {
                    this.mittente = mittente;
            }
           
            public void impostaDestinatario(String destinatario) {
                    this.destinatario = destinatario;
            }
           
            public void impostaData(String data) {
                    this.data = data;
            }
           
            public void impostaOra(String ora) {
                    this.ora = ora;
            }
           
    }
     
     
    abstract class MessaggioDiTesto extends Messaggio {
            protected char[] testo;
            protected int numeroCaratteri = 0;
           
            abstract boolean aggiungi(char c);
           
            public String toString() {
                    String tmp = "Da: " +mittente+ "\n" +
                             "A: " +destinatario+ "\n" +
                                         "Data: " +data+ " " +ora;
                   
                    for(int i=0; i<numeroCaratteri; i++)
                            tmp += (i%25==0? "\n" : "") +testo[i];
                   
                    return tmp;
            }
    }
     
     
    class Sms extends MessaggioDiTesto {
            public static final int MAX = 160;
           
            //costruttore, lo costruisco come un array
            public Sms() {
                    this.testo = new char[MAX];
            }
           
           
            public boolean aggiungi(char c) {
                    if(this.numeroCaratteri < MAX) {
                            this.testo[this.numeroCaratteri++] = c;
                        return true;
                    }
                    else
                            return false;
            }
           
    }
     
     
    class SmsLungo extends MessaggioDiTesto {
            private String testoLungo = "";
           
            public boolean aggiungi(char c) {
                    this.testoLungo += c;
                    this.numeroCaratteri++;
                    this.testo = this.testoLungo.toCharArray();
                    return true;
            }
           
            //creo un array di Sms normali da un Sms lungo
            public Sms[] spezza() {
                    int numeroMessaggi = this.numeroCaratteri/Sms.MAX+1;
                    Sms[] messaggi = new Sms[numeroMessaggi];
                    for(int i=0; i<numeroMessaggi; i++) {
                            messaggi[i] = new Sms();
                            messaggi[i].impostaMittente(this.mittente);
                            messaggi[i].impostaDestinatario(this.destinatario);
                            messaggi[i].impostaData(this.data);
                            messaggi[i].impostaOra(this.ora);
                           
                            int j = i * Sms.MAX;
                           
                            while(j<this.numeroCaratteri &&
                                            messaggi[i].aggiungi(this.testo[j]))
                                    j++;
                    }
                    return messaggi;
            }
    }
Ora vorrei creare nella classe main dei messaggi da visualizzare con il destinatario, data, ora e mittente:

Codice sorgente
codice:
    public class UsaSms {
            public static void main(String[] args) {
                    Messaggio mess = new Sms();
                    Messaggio mess1 = new SmsLungo();
                   
                    System.out.print("Inserisci il tuo numero di telefono: ");
                    mess.impostaMittente(Leggi.unoString());
                    System.out.print("\nChe giorno è oggi? ");
                    mess.impostaData(Leggi.unoString());
                    System.out.println("Scrivi un messaggio breve (max 160 caratteri) ");
                    String x = Leggi.unoString();
                    //inserisco i caratteri della stringa in un array
                    char[] caratteri = x.toCharArray();
                    for(int i=0; i<caratteri.length; i++)
                       mess.aggiungi(caratteri[i]);
                    System.out.println();
                   
                    System.out.print("Che ore sono? ");
                    mess.impostaOra(Leggi.unoString());
                    System.out.print("Inserisci il numero di telefono\n" +
                                              " a cui inviare il messaggio: ");
                    mess.impostaDestinatario(Leggi.unoString());
                    System.out.println();
                   
                    System.out.println("Ora scrivi un messaggio lungo ");
                    mess1.aggiungi(Leggi.unChar());
                    System.out.println();
                   
                    System.out.print("Che ore sono? ");
                    mess.impostaOra(Leggi.unoString());
                    System.out.print("Inserisci il numero di telefono\n" +
                                              " a cui inviare il messaggio: ");
                    mess.impostaDestinatario(Leggi.unoString());
                    System.out.println();
                   
                    System.out.print("Il primo messaggio, quello breve, è il seguente: ");
                    System.out.print(mess.spezza());
                   
                    System.out.print("Il secondo messaggio, quello lungo, è il seguente: ");
                    System.out.print(mess1.spezza());
                   
                    System.exit(0);
            }
     
    }

Purtroppo mi da errore nella creazione degli oggetti, mi aiutate voi a farlo funzionare? Grazie mille!