0

Я пытаюсь переопределить метод getMessage() в классе NumberFormatException на Java, который является непроверенным Исключением. По какой-то причине я не могу ее переопределить. Я знаю, что это должно быть что-то действительно простое, но я не могу понять, чего я могу потерять. Может ли кто-нибудь помочь? Вот мой код:Переопределить метод из непроверенного класса Exception в Java

public class NumberFormatSample extends Throwable{ 

private static void getNumbers(Scanner sc) { 
    System.out.println("Enter any two integers between 0-9 : "); 
    int a = sc.nextInt(); 
    int b = sc.nextInt(); 
    if(a < 0 || a > 9 || b < 0 || b > 9) 
     throw new NumberFormatException(); 
} 

@Override 
public String getMessage() { 
    return "One of the input numbers was not within the specified range!"; 

} 
public static void main(String[] args) { 
    try { 
     getNumbers(new Scanner(System.in)); 
    } 
    catch(NumberFormatException ex) { 
     ex.getMessage(); 
    } 
} 

}

ответ

1

EDIT (после комментариев).

Кажется, вы ищете:

public class NumberFormatSample { 

    private static void getNumbers(Scanner sc) { 
     System.out.println("Enter any two integers between 0-9 : "); 
     int a = sc.nextInt(); 
     int b = sc.nextInt(); 
     if(a < 0 || a > 9 || b < 0 || b > 9) 
      throw new NumberFormatException("One of the input numbers was not within the specified range!"); 
    } 

    public static void main(String[] args) { 
     try { 
      getNumbers(new Scanner(System.in)); 
     } 
     catch(NumberFormatException ex) { 
      System.err.println(ex.getMessage()); 
     } 
    } 
} 
+0

На самом деле спецификации упоминают, что я должен бросить только объект NumberFormatException. – Setafire

+0

@Setafire: см. Мое редактирование. – jlordo

+0

Да, я только что получил это. Редактировал оригинальный пост, но вы уже отредактировали свой первый. – Setafire

3

Вам не нужно переопределить ничего или создавать подклассы Throwable.

Просто позвоните throw new NumberFormatException(message).

+0

Спасибо, что сделал. – Setafire

1

Как следует из других ответов, то, что вы на самом деле пытаетесь сделать, не требует переопределения вообще.

Однако, если вам действительно нужно переопределить метод в NumberFormatException, вы должны:

  • extendчто класс, не Throwable и
  • экземпляр экземпляра класса, а не NumberFormatException.

Например:

// (Note: this is not a solution - it is an illustration!) 
public class MyNumberFormatException extends NumberFormatException { 

    private static void getNumbers(Scanner sc) { 
     ... 
     // Note: instantiate "my" class, not the standard one. If you new 
     // the standard one, you will get the standard 'getMessage()' behaviour. 
     throw new MyNumberFormatException(); 
    } 

    @Override 
    public String getMessage() { 
     return "One of the input numbers was not within the specified range!"; 
    } 

    public static void main(String[] args) { 
     try { 
      getNumbers(new Scanner(System.in)); 
     } 
     // Note: we can still catch NumberFormatException, because our 
     // custom exception is a subclass of NumberFormatException. 
     catch (NumberFormatException ex) { 
      ex.getMessage(); 
     } 
    } 
} 

Перекрытие не работает путем изменения существующего класса. Он работает, создавая новый класс на основе существующего ... и используя новый класс.

+0

Спасибо за приятное объяснение. – Setafire

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

  • Нет связанных вопросов^_^