2

我正在学习java。我正在阅读的书有一个问题,询问以下代码有什么问题?我在 NetBeans 中输入了代码,我可以看到错误,但为什么会出现此错误以及如何解决?

错误在代码上突出显示public A(int t),它说

类 B 中的构造函数 B 不能应用于给定类型,需要 int,找不到参数,原因是实际参数列表和形式参数列表的长度不同。

这是代码:

public class Test {
    public static void main(String[] args) {
       B b = new B(5);
    }
}

class A extends B {
    public A(int t)  {
        System.out.println("A's constructor is invoked");
    }
}

class B  {
    public B(int k)   {
        System.out.println("B's constructor is invoked");
    }
}
4

4 回答 4

4

当您super classargs constructor并且没有无参数构造函数时,您必须使用super(args)来自子类构造函数的调用显式调用它

class A extends B {
     public A(int t)  {
         super(t);
            System.out.println("A's constructor is invoked");
        }

}
于 2013-01-10T00:52:39.457 回答
1

您需要调用超类的构造函数作为第一个语句A(int)

public A(int t)  {
   super(t);
   System.out.println("A's constructor is invoked");
}
于 2013-01-10T00:52:20.217 回答
1

B 类定义了构造函数,因此它没有公共隐式默认构造函数(没有参数)。super(t)如果零参数超类构造函数不可用,所有子类构造函数都必须通过 显式调用超类构造函数。

于 2013-01-10T00:54:38.277 回答
1

B 类只有一个带int参数的构造函数。另一方面,您在 A 类中的构造函数(隐式)尝试调用 A 的超类(即 B)中不带参数的构造函数。这是错误的原因。至少有两种方法可以解决问题:

  1. 在 B 类中创建一个无参数构造函数。

  2. 显式调用 B 类中的构造函数,该构造函数将 int 作为参数。您可以使用super关键字来执行此操作。

于 2013-01-10T00:55:20.230 回答