я не знаю, почему этот код компилируется на Java 7:java.io.Closeable: зачем бросать RuntimeException в close() работает?
class Lamb implements Closeable{
@Override
public void close(){
throw new RuntimeException();
}
}
метод Close() из закрывающихся бросает IOException. При переопределении метода объявление «броски» должно оставаться неизменным или использовать подкласс. Теперь RuntimeException является «runtime», поэтому его не нужно объявлять (я получаю эту часть), но он наследует от Exception, а не IOException! Вы не можете расширить сферу действия, не так ли?
Любой метод может выкинуть любое исключенное исключение, независимо от объявлений 'throws' (вы сказали это сами). Неважно, к какой ветви иерархии относится неконтролируемое исключение, потому что она не подлежит проверке (именно поэтому ее называют «непроверенным» исключением). –