2013-11-23 2 views
2

Я читаю о наследовании и исключениях. Когда я пытаюсь скомпилировать приведенный ниже код в консоли, я получаю ошибку компилятора. Тем не менее я не мог понять, почему. Но если я изменю имя метода в моем классе B, все будет хорошо. Пожалуйста помоги.Программа не компилируется

Вот мой код:

import java.io.IOException; 

class A { 

    public void print() throws IOException { 
     System.out.println("In Class A."); 
     throw new IOException("Printed in A."); 
    } 

} 

class B extends A { 

    public void print() throws Exception { 
     System.out.println("In Class B."); 
     throw new Exception("Printed in B."); 
    } 

} 

public class TestPrint { 

    public static void main (String args[]) { 
     B b = new B(); 
     try { 
      b.print(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 

ответ

4

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

Exception - класс супер IOException.

Таким образом, ваш print() метод подклассы (B) может бросить либо IOException или любой из подгрупп классов IOException.

Измените класс B, как показано ниже:

class B extends A { 

    public void print() throws IOException { 
     System.out.println("In Class B."); 
     throw new IOException("Printed in B."); 
    } 

} 
1

Вы не можете бросить высшее исключение в иерархии наследования в перегруженной методе Это IOException является подклассом Exception класса.

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

+0

, который был написан час назад Гокул Нат !! – iShaalan

Смежные вопросы