我正在学习java。我正在阅读的这本书有一个问题,询问以下代码有什么问题?我在NetBeans中键入了代码,我可以看到错误,但为什么会出现此错误以及如何解决?
错误在代码public A(int t)
上突出显示,并显示
B类中的构造函数B不能应用于给定类型,require 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");
}
}
答案 0 :(得分:4)
当您的super class
有args constructor
并且没有no-args构造函数时,您必须使用来自子类构造函数的super(args)
调用显式调用它
class A extends B {
public A(int t) {
super(t);
System.out.println("A's constructor is invoked");
}
}
答案 1 :(得分:1)
您需要将超类的构造函数作为A(int)
中的第一个语句:
public A(int t) {
super(t);
System.out.println("A's constructor is invoked");
}
答案 2 :(得分:1)
B类定义了构造函数,因此它没有公共隐式默认构造函数(没有参数)。如果零参数超类构造函数不可用,则所有子类构造函数必须通过super(t)
显式调用超类构造函数。
答案 3 :(得分:1)
B类只有一个带有int
参数的构造函数。另一方面,类A中的构造函数(隐式)尝试在A的超类(即B)中调用不带参数的构造函数。这是错误的原因。至少有两种方法可以解决问题:
在B类中创建一个无参数构造函数。
显式调用类B中的构造函数,该构造函数将int作为参数。您可以使用super
关键字