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

Я пытаюсь получить класс B для нового класса C в Java. Конструктор базового класса требует, чтобы незарегистрированные исключения были выброшены или перехвачены. Но если я пытаюсь поместить super (..) в try / catch, мне говорят, что вызов super должен быть первым оператором в конструкторе. Кто-нибудь знает способ обойти это?

public class C extends B
{
   //Following attempt at a constructor generates the error "Undeclared exception E; must be caught or declared
   //to be thrown
    public C(String s)
    { 
         super(s);
    }

    //But the below also fails because "Call to super must be the first statement in constructor"
    public C(String s)
    {
         try
         {
              super(s);
         }
          catch( Exception e)
         {
         }
     }
 }

Большое спасибо, Крис

4 ответа

Решение

Вы всегда можете объявить Exception в сигнатуре конструктора с использованием условия throws.

public C(String s) throws WhatEverException
    {

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

public class B {
    public B(String s) throws E {
       // ... your code .../
    }
}

public class C extends B {
   public C(String s) throws E { 
       super(s);
   }

}

Вы не можете определить конструктор без вызова супер-конструктора в первом выражении. Если это возможно, вы можете выдать исключение времени выполнения, тогда вам не нужно писать блоки try/catch.

Ну, есть три вещи, которые вам нужно понять.

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

Пример -

public class Parent {

public Parent(){
    throw new NullPointerException("I am throwing exception");
}

public void sayHifromParent(){
    System.out.println("Hi");
}
}


public class Child extends Parent{

public Child()throws NullPointerException{

    super();

}
public static void main(String[] args) {
    Child child = new Child();
    System.out.println("Hi");
    child.sayHifromParent();

}

}
Другие вопросы по тегам