Esercitazione. Docente Ing. Mariateresa Celardo

Documenti analoghi
Programmazione ad Oggetti: JAVA. Esercitazione

Esercizi di preparazione alla Seconda Parte

GESTIONE DEGLI ERRORI

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Esempi. Esempio utilizzo di classi

Programmazione II Compitino (Vers. B)

Esercitazione n 2. Obiettivi

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

ESERCIZIO 1 (STRINGHE)

Programmazione II Compitino (Vers. B)

Esempio: Costruttori ed ereditarietà

Metodi statici. Dichiarazione e chiamata di metodi statici

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Fondamenti di Informatica T-1. Costruttori Ereditarietà

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Esempi in Java di program.ne O-O

Programmazione a oggetti

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Ereditarietà e Polimorfismo

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

La classe java.lang.object

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

ESERCIZIO 1 (FILE DI TESTO)

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Programmazione II Compitino (Vers. A)

16 - Ereditarietà, tipi e gerarchie

Gestione delle eccezioni

Laboratorio di Programmazione Ottobre. Simone Zaccaria

Prova d Esame Compito A

Esempio 2: Subtyping

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Esempio: Interfacce. Gioco Interfacce

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Proprietà delle Classi e degli Oggetti in Java

Ricerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

Eccezioni predefinite

Esempio: Interfacce. Gioco Interfacce

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2012

Esercizi della lezione 5 di Java

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

Programmazione ad oggetti Prova scritta 15 Gennaio 2013

Programmazione con Java

Gestione delle eccezioni in Java

Programmazione II Compitino (Vers. A)

Programmazione 1 A.A. 2015/2016

Laboratorio di Programmazione 1 [Java]

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2016/ Giugno 2017

Laboratorio di Programmazione 1 [Java]

Eccezioni Precisazioni e approfondimenti

Corso sul linguaggio Java

Esempio: L EURO-CONVERTITORE (1) Scopo

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre 2001

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

Le eccezioni in Java

Programmazione Java Variabili membro, Metodi La parola chiave final

Esercizio 3. Oppure fare queste operazioni nel metodo main all interno della classe Persona.

CloneNotSupportedException clone() Object clone() protected native Object clone() throws CloneNotSupportedException this

Le basi del linguaggio Java

Laboratorio di reti I

Algoritmi di Ricerca. Esempi di programmi Java

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010

Algoritmi di Ricerca. Esempi di programmi Java

Programmazione II Compitino (Vers. A)

Programmazione ad oggetti

3) Descrivere l architettura di un elaboratore tramite astrazione a livelli

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Esempio su strutture dati dinamiche: ArrayList

Gestione delle eccezioni Individuazione e ripristino parseint Individuazione e ripristino Individuazione e ripristino parseint

Cognome Nome Matricola Postazione PC. Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a Gennaio 2015

Eccezioni. Corso di Tecniche di Programmazione

Insieme.java. Printed by Paolo. Feb 24, 04 16:44 Page 1/1 class Insieme { private int[] elementi; Tuesday February 24, /10

Polimorfismo parametrico vs polimorfismo per inclusione

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Uguaglianza e copia di oggetti

Definizione di classi

Laboratorio di Sistemi Classi e relazioni Java

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Linguaggi di Programmazione II Matricole con le due ultime cifre dispari

Introduzione alla Programmazione in Java attraverso un esempio commentato

Riassunto. La programmazione OO. Oggi. Esempio

Esonero di Informatica I. Ingegneria Medica

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Politecnico di Milano

Transcript:

Esercitazione Docente Ing. Mariateresa Celardo mariateresa.celardo@uniroma2.it Scrivere la classe Motorino che ha i seguenti attributi colore: una stringa indicante il colore del motorino, velocità: un numero con la virgola indicante la velocità in Km/h che possiede il motorino, tipo: una stringa indicante la marca e il modello del motorino es. Piaggio scarabeo, l attributo antifurto un boolean che indica se è stato inserito l antifurto (ha un valore iniziale pari a false). Il costruttore ha come parametri una stringa per il colore, una stringa per il tipo, un numero con la virgola per la velocità ed assegna opportunamente i valori dei parametri agli attributi. Scrivere il metodo getvelocità che restituisce la velocità del motorino, scrivere inoltre il metodo accelera che ha come parametro un numero con la virgola indicante i Km/h che si vogliono aggiungere alla velocità, il metodo verifica il valore dell attributo antifurto se è false aggiunge il valore del parametro all attributo velocità, altrimenti non fa nulla. Scrivere il metodo inserisciantifurto che assegna un valore true all attributo antifurto. 1

Scrivere la classe Motorino che ha i seguenti attributi colore: una stringa indicante il il colore del motorino, velocità: un numero con la la virgola indicante la la velocità in Km/h che possiede il motorino, tipo: una stringa indicante la marca e il modello del motorino es. Piaggio scarabeo, l attributo antifurto un boolean che indica se è stato inserito l antifurto (ha un valore iniziale pari a false). class Motorino { String colore; float velocità; String tipo; boolean antifurto =false; Il costruttore ha come parametri una stringa per il colore, una stringa per il tipo, un numero con la virgola per la velocità ed assegna opportunamente i valori dei parametri agli attributi. Motorino(String c, String t, float x){ colore=c; velocità=x; tipo=t; 2

Il costruttore ha come parametri una stringa per il colore, una stringa per il tipo, un numero con la virgola per la velocità ed assegna opportunamente i valori dei parametri agli attributi. Alternativamente il costruttore poteva essere: Motorino(String colore, String tipo, float velocità){ this.colore=colore; this.velocità=velocità; this.tipo=tipo; Scrivere il metodo getvelocità che restituisce la velocità del motorino Il metodo restituisce la velocità occorre capire il tipo di dato per tale attributo. Nell esercizio: Scrivere la classe Motorino che ha i seguenti attributi:. velocità: un numero con la virgola indicante la velocità in Km/h che possiede il motorino Ho definito l attributo come float velocità; float getvelocità(){ return velocità; 3

Scrivere inoltre il metodo accelera che ha come parametro un numero con la virgola indicante i Km/h che si vogliono aggiungere alla velocità, il metodo verifica il valore dell attributo antifurto se è false aggiunge il valore del parametro all attributo velocità, altrimenti non fa nulla. void accelera(float x){ if(antifurto == false) velocità = velocità+x; Scrivere inoltre il metodo accelera che ha come parametro un numero con la virgola indicante i Km/h che si vogliono aggiungere alla velocità, il metodo verifica il valore dell attributo antifurto se è false aggiunge il valore del parametro all attributo velocità, altrimenti non fa nulla. void accelera(float x){ if(antifurto == false) {velocità = = velocità+x; 4

Scrivere il metodo inserisciantifurto che assegna un valore true all attributo antifurto. void inserisciantifurto(){ antifurto=true; class Motorino { String colore; float velocità; String tipo; boolean antifurto =false; Motorino(String c, String t, float x){ colore=c; velocità=x; tipo=t; float getvelocità(){ return velocità; void accelera(float x){ if(antifurto == false) velocità = velocità+x; void inserisciantifurto(){ antifurto=true; 5

Scrivere la classe MotorinoImmatricolato sottoclasse della classe Motorino che ha in più 2 attributi: maxvelocità un numero con la virgola (coerente con la scelta fatta per l attributo velocità) indicante la velocità massima in Km/h che il motorino può raggiungere; targa una stringa indicante la targa del motorino (ad entrambi gli attributi viene assegnato un valore nel costruttore). Aggiungere il metodo getmax il metodo stampa il valore dell attributo maxvelocità. Ridefinire il metodo accelera in modo che prima di modificare la velocità effettui un controllo sulla velocità massima raggiunta. Il metodo definisce una variabile s (dello stesso tipo di velocità) ed assegna ad s la somma tra il valore del parametro del metodo ed il valore dell attributo velocità; se s è minore del valore dell attributo maxvelocità assegna il valore di s all attributo velocità altrimenti assegna all attributo velocità il valore dell attributo maxvelocità. Scrivere la classe MotorinoImmatricolato sottoclasse della classe Motorino che ha in più 2 attributi: maxvelocità un numero con la virgola (coerente con la scelta fatta per l attributo velocità) indicante la velocità massima in Km/h che il motorino può raggiungere; targa una stringa indicante la targa del motorino (a entrambi gli attributi viene assegnato un valore nel costruttore). class MotorinoImmatricolato extends Motorino { 6

Scrivere la classe MotorinoImmatricolato sottoclasse della classe Motorino che ha in più 2 attributi: maxvelocità un numero con la virgola (coerente con la scelta fatta per l attributo velocità) indicante la velocità massima in Km/h che il motorino può raggiungere; targa una stringa indicante la targa del motorino (a entrambi gli attributi viene assegnato un valore nel costruttore). class MotorinoImmatricolato extends Motorino { float maxvelocità; String targa; La sottoclasse non eredita il costruttore! Nel testo: (a entrambi gli attributi viene assegnato un valore nel costruttore). Costruttore superclasse Motorino(String c, String t, float x){ colore=c; velocità=x; tipo=t; //costruttore super classe MotorinoImmatricolato(String c, String t, float x, float y, String targa){ super(c,t,x); maxvelocità = y; this.targa = targa; 7

Aggiungere il metodo getmax il metodo stampa il valore dell attributo maxvelocità. void getmax(){ System.out.println(maxVelocità); Ridefinire il metodo accelera in modo che prima di modificare la velocità effettui un controllo sulla velocità massima raggiunta. Metodo della superclasse Motorino void accelera(float x){ if(antifurto == false) velocità = velocità+x; 8

Il metodo definisce una variabile s (dello stesso tipo di velocità) ed assegna ad s la somma tra il valore del parametro del metodo e il valore dell attributo velocità; se s è minore del valore dell attributo maxvelocità assegna il valore di s all attributo velocità altrimenti assegna all attributo velocità il valore dell attributo maxvelocità. void accelera(float x){ float s=velocità+x; if(antifurto == false) { if(s<=maxvelocità) velocità=s; else velocità=maxvelocità; class MotorinoImmatricolato extends Motorino { float maxvelocità; String targa; MotorinoImmatricolato(String c, String t, float x, float y, String targa){ super(c,t,x); maxvelocità = y; this.targa = targa; void getmax(){ System.out.println(maxVelocità); void accelera(float x){ float s=velocità+x; if(antifurto == false) if(s<=maxvelocità) velocità=s; else velocità=maxvelocità; 9

Scrivere la classe UsoMotorino che ha il metodo main in cui si istanzia un oggetto di tipo Motorino di coloregrigiometallizzato con velocità40,5 e tipo Piaggio Liberty, richiamare il metodo getvelocità memorizzandone il valore in una variabile. Istanziare un altro oggetto di tipo MotorinoImmatricolato con colore rosso, velocità 30,5 tipo Aprilia Scarabeo, maxvelocità 60 targa CV1234, e richiamare il metodo getmax. Infine richiamare il metodo accelera con parametro pari a 30,7 per entrambi gli oggetti e quindi richiamare il metodo getvelocità per entrambi gli oggetti stampando i due valori. Scrivere la classe UsoMotorino che ha il metodo main class UsoMotorino { public static void main( String args[]){ 10

Scrivere la classe UsoMotorino che ha il metodo main in cui si istanzia un oggetto di tipo Motorino di coloregrigiometallizzato con velocità40,5 e tipo Piaggio Liberty Costruttore della classe Motorino: Motorino(String c, String t, float x){ colore=c; velocità=x; tipo=t; Motorino m; m= new Motorino("grigiometallizzato","Piagio Liberty",40.5); Motorino m; m= new Motorino("grigiometallizzato","Piagio Liberty",40.5); Se creo l oggetto scrivendo 40.5 ho un errore C:\esercizi>javac UsoMotorino.java UsoMotorino.java:5: cannot resolve symbol symbol : constructor Motorino (java.lang.string,java.lang.string,double) location: class Motorino m= new Motorino("grigiometallizzato","Piagio Liberty",40.50); ^ Il compilatore avvisa che nella classe UsoMotorino trova la chiamata ad un costruttore che vuole come parametri una stringa, una stringa, un double (40.5) ma non esiste Il costruttore come terzo parametro vuole un float Motorino(String c, String t, float x){ colore=c; velocità=x; tipo=t; 11

Scrivere la classe UsoMotorino che ha il metodo main in cui si istanzia un oggetto di tipo Motorino di coloregrigiometallizzato con velocità40,5 e tipo Piaggio Liberty class UsoMotorino { public static void main( String args[]){ Motorino m; m=new Motorino("grigiometallizzato","PiagioLiberty",40.5f); Scrivere la classe UsoMotorino che ha il metodo main in cui si istanzia un oggetto di tipo Motorino di coloregrigiometallizzato con velocità40,5 e tipo Piaggio Liberty, richiamare il metodo getvelocità memorizzandone il valore in una variabile. class UsoMotorino { public static void main( String args[]){ Motorino m; m= new Motorino("grigiometallizzato","Piagio Liberty",40.5f); float x = m.getvelocità(); 12

Istanziare un altro oggetto di tipo MotorinoImmatricolato con colore rosso, velocità 30,5 tipo Aprilia Scarabeo, maxvelocità 60 targa CV1234, MotorinoImmatricolato mi; mi= new MotorinoImmatricolato( rosso", Aprilia Scarabeo",30.5f, 60.0f, CV1234 ); richiamare il metodo getmax il metodo nella classe è definito void getmax(){ System.out.println(maxVelocità); mi.getmax(); 13

Infine richiamare il metodo accelera con parametro pari a 30,7 per entrambi gli oggetti e quindi richiamare il metodo getvelocità per entrambi gli oggetti stampando i due valori. mi.accelera(30.7f); m.accelera(30.7f); System.out.println(mI.getVelocità()); System.out.println(m.getVelocità()); class UsoMotorino { public static void main( String args[]){ Motorino m; m= new Motorino("grigiometallizzato","Piagio Liberty",40.5f); float x = m.getvelocità(); MotorinoImmatricolato mi; mi= new Motorino( rosso", Aprilia Scarabeo",30.5f, 60.0f, CV1234 ); mi.getmax(); mi.accelera(30.7f); m.accelera(30.7f); System.out.println(mI.getVelocità()); System.out.println(m.getVelocità()); 14

Scrivere la classe Dipendente che ha i seguenti attributi matricola: una stringa indicante il numero di matricola del dipendente, stipendio: un numero con la virgola indicante lo stipendio base che possiede il dipendente, straordinario: un numero con la virgola indicante l importo dovuto per ciascuna ora di straordinario effettuata dal dipendente. Il costruttore ha come parametri una stringa per la matricola, un numero con la virgola per lo stipendio ed un numero con la virgola per lo straordinario ed assegna opportunamente i valori dei parametri agli attributi. Scrivere il metodo getstipendio che restituisce il valore dell attributo stipendio, scrivere inoltre il metodo paga che ha come parametro un numero intero indicante il numero di ore di straordinario effettuate dal dipendente, il metodo restituisce il valore ottenuto sommando all attributo stipendio il risultato del prodotto tra il parametro del metodo e l attributo straordinario. Scrivere il metodo stampa che stampa il valore degli attributi della classe Scrivere la classe Dipendente che ha i seguenti attributi matricola: una stringa indicante il numero di matricola del dipendente, stipendio: un numero con la virgola indicante lo stipendio base che possiede il dipendente, straordinario: un numero con la virgola indicante l importo dovuto per ciascuna ora di straordinario effettuata dal dipendente. class Dipendente{ String matricola; double stipendio, straordinario; 15

Il costruttore ha come parametri una stringa per la matricola, un numero con la virgola per lo stipendio ed un numero con la virgola per lo straordinario ed assegna opportunamente i valori dei parametri agli attributi. Dipendente(String m, double x, double y){ matricola=m; stipendio=x; straordinario=y; Scrivere il metodo getstipendio che restituisce il valore dell attributo stipendio, double getstipendio(){ return stipendio; scrivere inoltre il metodo paga che ha come parametro un numero intero indicante il numero di ore di straordinario effettuate dal dipendente, il metodo restituisce il valore ottenuto sommando all attributo stipendio il risultato del prodotto tra il parametro del metodo e l attributo straordinario double paga(int x){ return stipendio+x*straordinario; 16

Scrivere il metodo stampa che stampa il valore degli attributi della classe void stampa(){ System.out.println("matricola ="+matricola+" stipendio ="+ stipendio+" straordinario= "+straordinario); /*Alternativamente System.out.println+matricola+" "+ stipendio+" "+straordinario);*/ class Dipendente{ String matricola; double stipendio, straordinario; Dipendente(String m, double x, double y){ matricola=m; stipendio=x; straordinario=y; double getstipendio(){ return stipendio; double paga(int x){ return stipendio+x*straordinario; void stampa(){ System.out.println("matricola ="+matricola+" stipendio ="+" straordinario= "+straordinario); 17

Scrivere la sottoclasse DipendenteA della classe Dipendente che ha in più l attributo malattia: un numero intero indicante i giorni di malattia presi che viene inizializzato a zero. Aggiungere il metodo prendimalattia che ha come parametro un numero intero indicante i giorni di malattia presi, il metodo modifica il valore dell attributo malattia aggiungendogli il valore del parametro. Ridefinire il metodo paga in modo che prima definisce una variabile p a cui assegna il valore ottenuto richiamando il metodo paga della superclasse, poi se l attributo malattia è uguale a zero il metodo restituisce il valore di p altrimenti restituisce il valore ottenuto sottraendo a p il valore del prodotto tra malattia e 15,0. Definire un metodo stampamalattia che stampa il valore dell attributo malattia Scrivere la sottoclasse DipendenteA della classe Dipendente che ha in più l attributo malattia: un numero intero indicante i giorni di malattia presi che viene inizializzato a zero. class DipendenteA extends Dipendente{ int malattia; DipendenteA(String m, double x, double y){ super(m,x,y); malattia=0; 18

Aggiungere il metodo prendimalattia che ha come parametro un numero intero indicante i giorni di malattia presi, il metodo modifica il valore dell attributo malattia aggiungendogli il valore del parametro. void prendimalattia(int x){ alternativamente malattia= malattia+x; void prendimalattia(int x){ malattia+=x; Ridefinire il metodo paga in modo che prima definisce una variabile p a cui assegna il valore ottenuto richiamando il metodo paga della superclasse, poi se l attributo malattia è uguale a zero il metodo restituisce il valore di p altrimenti restituisce il valore ottenuto sottraendo a p il valore del prodotto tra malattia e 15,0. Definire un metodo stampamalattia che stampa il valore dell attributo malattia double paga(int x){ double p= super.paga(x); if (malattia==0) return p; else return p-malattia*15.0; void stampamalattia(){ System.out.println("malattia ="+malattia); 19

class DipendenteA extends Dipendente{ int malattia; DipendenteA(String m, double x, double y){ super(m,x,y); malattia=0; void prendimalattia(int x){ malattia+=x; double paga(int x){ double p= super.paga(x); if (malattia==0) return p; else return p-malattia*15.0; void stampamalattia(){ System.out.println("malattia ="+malattia); Scrivere la classe CalcolaStipendi che ha il metodo main in cui istanziare un oggetto di tipo Dipendente con matricola 00309 stipendio 1000,00 e straordinario 7,50. Richiamare il metodo paga con parametro pari a 10 e stampare a video il valore restituito, stampare il valore dello stipendio di tale oggetto richiamando getstipendio. Istanziare un altro oggetto di tipo DipendeteA con matricola 00201 stipendio 1500,0 e straordinario 8,50. Richiamare il metodo prendimalattia con parametro pari a 5, richiamare il metodo paga con parametro pari a 3 stampando a video il valore restituito. Infine richiamare il metodo stampamalattia. 20

Scrivere la classe CalcolaStipendi che ha il metodo main in cui istanziare un oggetto di tipo Dipendente con matricola 00309 stipendio 1000,00 e straordinario 7,50. Richiamare il metodo paga con parametro pari a10 e stampare a video il valore restituito, stampare il valore dello stipendio di tale oggetto richiamando getstipendio. class CalcolaStipendi { public static void main( String args[]){ Dipendente a; a= new Dipendente("00309",1000.00,7.50); System.out.println(a.paga(10)); System.out.println(a.getStipendio()); Istanziare un altro oggetto di tipo DipendeteA con matricola 00201 stipendio 1500,0 e straordinario 8,50. Richiamare il metodo prendimalattia con parametro pari a 5, richiamare il metodo paga con parametro pari a 3 stampando a video il valore restituito. Infine richiamare il metodo stampamalattia. DipendenteA a1; a1= new DipendenteA("00201",1500.00,8.50); a1.prendimalattia(5); System.out.println(a1.paga(3)); a1.stampamalattia(); 21

Eccezioni Modificare il metodo double paga(int x) in modo che se x è maggiore di 38 il metodo lancia l eccezione Exception con messaggio troppe ore di straordinario Eccezioni Modificare il metodo double paga(int x) in modo che se x è maggiore di 38 il metodo lancia l eccezione Exception con messaggio troppe ore di straordinario double paga(int x) throws Exception{ if(x>38) throw new Exception( troppe ore di straordinario ); else return stipendio+x*straordinario; 22

Eccezioni Il metodo double paga(int x) della sottoclasse richiama il metodo paga della superclasse e in conseguenza all introduzione dell eccezione nella superclasse deve essere modificato per indicare che lancia una eccezione double paga(int x) { double p= super.paga(x); if (malattia==0) return p; else return p-malattia*15.0; Il metodo propaga l eccezione eventualmente lanciata da super.paga Eccezioni Modificare il metodo double paga(int x) anche nella sottoclasse in conseguenza all introduzione dell eccezione nella superclasse: double paga(int x) throws Exception{ double p= super.paga(x); if (malattia==0) return p; else return p-malattia*15.0; 23

Eccezioni Se non si modifica la classe CalcolaStipendi quando viene mandato in esecuzione il programma si avrà: C:\esercizi\SecEs>javac CalcolaStipendi.java CalcolaStipendi.java:7: unreported exception java.lang.exception; must be caught or declared to be thrown System.out.println(a.paga(10)); ^ CalcolaStipendi.java:13: unreported exception java.lang.exception; must be caugh t or declared to be thrown System.out.println(a1.paga(3)); ^ 2 errors Eccezioni Modificare la classe CalcolaStipendi in modo da catturare l errore eventuale nella chiamata del metodo double paga(int x) 24

class CalcolaStipendi { public static void main( String args[]){ Dipendente a= new Dipendente("00309",1000.00,7.50); try{ System.out.println(a.paga(10)); catch(exception x){ System.out.println(x); System.out.println(a.getStipendio()); DipendenteA a1= new DipendenteA("00201",1500.00,8.50); a1.prendimalattia(5); try{ System.out.println(a1.paga(3)); catch(exception x){ System.out.println(x); a1.stampamalattia(); C:\esercizi\SecEs>javac CalcolaStipendi.java C:\esercizi\SecEs>java CalcolaStipendi 1075.0 1000.0 1450.5 malattia =5 25