Я пытаюсь понять, как работает несколько операторов catch в java. В документации говорится, что вы не можете иметь связанные типы в операторе catch.
Здесь у меня есть небольшой пример, с которым я играю:
class a extends Exception{}
class b extends RuntimeException{}
public class test{
public static void main(String[] args){
try {
System.out.println(new a() instanceof Exception);
System.out.println(new b() instanceof Exception);
throw new a();
}catch(a | b e) {
System.out.println(e.getStackTrace());
}
}
}
Оба класса являются экземплярами Exception. Во-первых, один очевидный способ, а второй наследуют от RuntimeException и RuntimeExeption наследуют Exception.
Так почему этот код компилируется? Разве исключение a не должно охватывать также исключение b ? Спасибо