编译器无法正确识别构造函数覆盖

时间:2011-06-05 19:53:03

标签: java netbeans compiler-errors

我会让代码和错误进行讨论,因为我真的认为他们说除了之外的一切都不应该发生!有谁知道如何进行编译?

代码


  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 个答案:

答案 0 :(得分:6)

是的,这应该发生!您没有初始化超类构造函数。 试试这个构造函数:

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

答案 1 :(得分:5)

构造函数在Java中不可覆盖。

我们需要看到BHTimerGUI的构造函数,但听起来像不是一个no-args构造函数,在这种情况下你需要显式编写一个超级调用来编写它,正确的参数例如在CountDownTimerGUI中将其添加为构造函数的第一行:

 super(control, disp);

编译器此刻将插入:

super();

但那不会在超类中找到构造函数。

答案 2 :(得分:1)

BHTimerGUI的构造函数采用什么参数?您可能需要将此行添加到CountDownTimerGUI的构造函数顶部:

super(control, disp);

答案 3 :(得分:1)

该消息告诉您,您编写的代码需要调用超类的no-arg默认构造函数。不幸的是,你还没有写过。

正如其他人所解释的那样,解决方案是显式调用已定义的超类构造函数之一。

将来看到此消息时,请务必打开超类的Java文档,并检查已实现的构造函数的参数。