Quando eu “sobrescrevo” (override) um método em uma subclasse, esse método não pode listar mais exceções que o método da superclasse sobrescrito.
Quando falamos em métodos static, não há herança, mas sim redefinição.
Na redefinição abaixo, eu estou conseguindo listar mais exceções no método na subclasse que os presentes da superclasse. Nenhum erro é gerado. Quando eu mudo o conjunto de exceções da subclasse para apenas uma, Exception, um erro é gerado dizendo “Exception Exception is not compatible with throws clause in SuperclasseMetodoStatic.m()”
public class SuperclasseMetodoStatic {
public static void m() throws ArrayIndexOutOfBoundsException
{
System.out.printf("%s", "Método m static na Superclasse");
}
}
Subclasse sem geração de erro:
public class SubclasseMetodoStatic extends SuperclasseMetodoStatic{
public static void n() throws ArithmeticException, ClassCastException
{
public static void m() throws Exception
{
}
}
}
Subclasse com geração de erro:
public class SubclasseMetodoStatic extends SuperclasseMetodoStatic{
public static void m() throws Exception
{
public static void m() throws Exception
{
}
}
}
Eu não entendo do porquê da não geração de erro quando coloco mais exceções. No segundo caso, Exception é mais amplo que ArrayIndexOutOfBoundsException e por isso gera erro, presumo.
Alguém poderia me fazer o favor de explicar o que está acontecendo?
Wilson
Seu próprio teste confirma isso