Компилятор не распознает переопределение конструктора - PullRequest
2 голосов
/ 05 июня 2011

Я позволю код и ошибки говорить, потому что я действительно думаю, что они говорят все, кроме ЭТО НЕ ДОЛЖНО БЫТЬ! Кто-нибудь знает, как сделать эту компиляцию?* Код


  class CountDownTimerGUI extends BHTimerGUI
  {
    private TimerJPanel control;
    private TimerDisplayJPanel disp;

    public CountDownTimerGUI(TimerJPanel control, TimerDisplayJPanel disp)
>>  {
      this.control = control;
      this.disp = disp;
    }
  }

(>> обозначает строку ошибки)

это переопределяет конструктор для BHTimerGUI, который имеет следующий конструктор:

  public BHTimerGUI(TimerJPanel control, TimerDisplayJPanel disp)
  {
    this.control = control;
    this.disp = disp;
  }

Ошибка компилятора


I:\Java\NetBeansProjects\Blue Husky's Timer 2.0.0\src\bhtimer\GUI.java:145: cannot find symbol
symbol  : constructor BHTimerGUI()
location: class bhtimer.BHTimerGUI
    {

NetBeans показывает всплывающее окно со следующим текстом:

constructor BHTimerGUI in class bhtimer.BHTimerGUI cannot be applied to given types;
  required: bhtimer.TimerJPanel,bhtimer.TimerDisplayJPanel
  found: no arguments
  reason: actual and formal argument lists differ in length

Ответы [ 4 ]

6 голосов
/ 05 июня 2011

Да, это ДОЛЖНО происходить! Вы не инициализируете конструктор суперкласса. Попробуйте с этим конструктором:

   public CountDownTimerGUI(TimerJPanel control, TimerDisplayJPanel disp){
      super(control, disp);
      this.control = control;
      this.disp = disp;
   }
5 голосов
/ 05 июня 2011

Конструкторы не могут быть переопределены в Java.

Нам нужно увидеть конструктор для BHTimerGUI, но похоже, что не является конструктором без аргументов, в этом случае вынужно будет явно закодировать супер-вызов с правильными параметрами, например, добавить это в качестве первой строки вашего конструктора в CountDownTimerGUI:

 super(control, disp);

В данный момент компилятор вставит:

super();

Но это не будет поиск конструктора в суперклассе.

1 голос
/ 05 июня 2011

Сообщение говорит вам, что ваш код, как написано, требует вызова конструктора по умолчанию для суперкласса no-arg. К сожалению для вас, никто не был написан.

Решение, как объяснили другие, заключается в явном вызове одного из определенных конструкторов суперкласса.

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

1 голос
/ 05 июня 2011

Какие аргументы принимает конструктор BHTimerGUI?Возможно, вам понадобится добавить эту строку в начало конструктора CountDownTimerGUI:

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