если метод в родительском классе «выбрасывает исключение», мы можем удалить его в переопределенном методе - PullRequest
0 голосов
/ 27 мая 2018

Если метод в родительском классе выдает Exception, можем ли мы удалить его в переопределенном методе?

class Parent{  
  void msg()throws IOException {System.out.println("parent");}  
}  

class TestExceptionChild extends Parent{  
  void msg(){  
    System.out.println("TestExceptionChild");  //this is i want to ask
  }  
  public static void main(String args[]){  
   Parent p=new TestExceptionChild();  
   p.msg();  
  }  
}  

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Да.Вы можете удалить, но не добавить проверенные исключения из переопределенной сигнатуры метода.

0 голосов
/ 27 мая 2018

Да, это разрешено: подкласс может сказать Java, что он не собирается выдавать определенное исключение, и Java примет его.

Это полезно в ситуациях, когда вы точно знаете класс вточка вызова.

Рассмотрим следующую настройку:

class A {
    public void foo() throws Exception {}
}
class B extends A {
    public void foo() {}
}

Вам разрешено делать это в контексте, который не перехватывает Exception:

B b = new B();
b.foo();

Java видит, что b имеет тип B, метод которого не генерирует проверенное исключение, поэтому допустим вызов foo().

Однако это приводит к ошибке:

A a = new B();
a.foo();

незарегистрированное исключение Исключение;должен быть перехвачен или объявлен как выброшенный

Теперь Java должна рассмотреть подпись A.foo() для вызова.Подпись включает throws Exception часть, поэтому Java должна убедиться, что проверенное исключение правильно обработано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...