Sto vedendo la questione dei metodi di override in Java. Il concetto di override, in generale, mi è chiaro. Quello che mi è un po' meno chiaro sono le restrizioni per quanto riguarda le eccezioni. Il mio libro, per le eccezioni sugli override, riporta: "
Can reduce or eliminate. Must not throw new or broader checked exceptions"
Prendiamo per esempio:
Codice:
import java.io.*;
class SuperClass
{
void doSomething () throws IOException { }
}
class SubClass extends SuperClass
{
....override di doSomething....
}
Questi override sono OK:
(1) void doSomething () { }
(2) void doSomething () throws FileNotFoundException { }
(3) void doSomething () throws FileNotFoundException, EOFException { }
mentre questi sono errati:
(4) void doSomething () throws Exception { }
(5) void doSomething () throws InterruptedException { }
Se ho capito bene, il perché (4) e (5) sono errati è dovuto al fatto che chi poi userà il metodo doSomething (ad esempio tramite un reference alla classe base) è solamente a conoscenza del fatto che l'eccezione "più larga" che può essere generata è la IOException. Se un override potesse lanciare una eccezione nuova o più "larga", il chiamante non saprebbe/potrebbe gestirla. Giusto?
Ditemi se ho capito!