Creare un programma in Java che rappresenti una gerarchia di veicoli. La gerarchia deve includere almeno tre livelli di ereditarietà:
una classe base Veicolo; che include attributi comuni a tutti i veicoli, come marca, modello e annoDiProduzione.
una sottoclasse Auto; che include almeno un attributo unico rispetto a veicolo (per esempio, numPorte).
una sottoclasse Moto; che include almeno un attributo unico rispetto a veicolo (per esempio, haSidecare).
Ogni classe dovrebbe avere:
uno o più costruttori;
metodi getter/setter;
ridefinizione del metodo toString().
Infine, implementare un main di prova con le seguenti operazioni:
creazione di un array di 3 veicoli;
lettura da terminale dei dati dei veicoli utilizzando la classe Scanner;
inserimento dei veicoli letti all'interno dell'array;
iterazione sull'array e stampa del risultato dell'invocazione del metodo toString().
Esercizio Bonus: I veicoli hanno un attributo aggiuntivo cc (cilindrata) e possono viaggiare su oggetti percorribili.
Qualsiasi oggetto percorribile deve fornire un limite minimo di cilindrata e un limite massimo di velocità per tutti i veicoli che la possono percorrere.
Un'autostrada o una strada secondaria sono due oggetti percorribili.
Un'autostrada memorizza un attributo pedaggio ed impone i seguenti limiti:
cilindrata minima di 250cc;
limite massimo di velocità 130km/h.
Una strada secondaria impone i seguenti limiti:
cilindrata minima 0cc;
limite massimo di velocità 90km/h.
La classe veicolo vuole rimandare la definizione del metodo void viaggia(Percorribile)alle sue sotto-classi.
Un'Auto viaggia su qualsiasi oggetto percorribile.
Una Moto viaggia su oggetti percorribili solo se la sua cilindrata rispetta il limite imposto.
Estendere il main in modo che
Aggiungere nel main un array di oggetti percorribili e intraprende, con i tre veicoli letti in input, un viaggio su ognuno di essi.