....ora sono a casa e ho dovuto scrivere un'altro tipo di esempio....e facendo un po di attenzione ho scoperto l'errore....
ovvero la posizione in cui andavo a scrivere il throws tipoEccezione era sbagliata.
Allego il codice qualora possa servire ad altri....
vado avanti con il cercar di capire le altre eccezioni, alcune proprio strane!!!
grazie, un po ostico l'argomento
bb
codice:
public class CalcoliA {
private int a;
private int b;
private double risultato;
public void setA (int a){
this.a = a;
}
public int getA (){
return a;
}
public void setB (int b){
this.b = b;
}
public int getB (){
return b;
}
public void setRisultato (int a, int b)throws ArithmeticException {
this.a = a;
this.b = b;
if (b ==0){
throw new ArithmeticException();
}
this.risultato = a/b;
System.out.println("risultato: " + (a/b));
}
public double getRisultato(){
return risultato;
}
}
////////
public class CalcoliB extends CalcoliA{
//costruttore che richiama la classe base
public CalcoliB (){
super ();
}
@Override
public void setB(int b) {
super.setB(b); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void setA(int a) {
super.setA(a); //To change body of generated methods, choose Tools | Templates.
}
//vado a fare un override di metodo che lancia una eccezione
@Override
public void setRisultato (int a, int b){
super.setA(a);
super.setB(b);
if (b==0){
System.out.println("sono la classe derivata");
throw new ArithmeticException();
}
double risultato = (double) (a/b);
System.out.println("ho settato il risultato a: " + risultato);
}
}
/////////
public class CalcoliC extends CalcoliB{
//costruttore
public CalcoliC (){
super();
}
//vado a fare un override di metodo che lancia una eccezione
@Override
public void setRisultato (int a, int b) throws MiaEccezione {
super.setA(a);
super.setB(b);
if (b==0){
System.out.println("sono la classe derivata C");
throw new MiaEccezione();
}
double risultato = (double) (a/b);
System.out.println("ho settato il risultato a: " + risultato);
}
}
/////
public class MiaEccezione extends ArithmeticException {
public MiaEccezione (){
System.out.println("Mia eccezione. Diviso zero non possibile");
}
}
/////
public class TestCalcoli {
public static void main (String args[]){
CalcoliA cal1 = new CalcoliA ();
try {
cal1.setRisultato(20, 0);
} catch (ArithmeticException e){
System.out.println("Classe A - divisione per zero non possibile");
} finally {
System.out.println("finally di A - viene sempre eseguito");
}
///
CalcoliB cal2 = new CalcoliB();
try {
cal2.setRisultato(30, 0);
} catch (ArithmeticException e){
System.out.println("Classe B derivata - hai diviso per zero. Non è consentito!");
}
///
CalcoliC cal3 = new CalcoliC();
try {
cal3.setRisultato(50, 0);
} catch (MiaEccezione e) {
System.out.println("Classe c derivata - hai diviso per zero. Non è consentito!");
}
}
}
//////
public class CalcoliD extends CalcoliB {
//costruttore
public CalcoliD (){
super();
}
//vado a fare un override di metodo che lancia una eccezione
@Override
public void setRisultato (int a, int b) throws ArithmeticException {
super.setA(a);
super.setB(b);
if (b==0){
System.out.println("sono la classe derivata D");
throw new ArithmeticException();
}
double risultato = (double) (a/b);
System.out.println("ho settato il risultato a: " + risultato);
}
}