这个java代码有什么问题?
我正在学习java。我正在读的这本书有一个问题,问下面的代码有什么问题?我已经在NetBeans中输入了代码,我可以看到错误,但是为什么会出现这个错误,以及如何解决它 错误在代码这个java代码有什么问题?,java,Java,我正在学习java。我正在读的这本书有一个问题,问下面的代码有什么问题?我已经在NetBeans中输入了代码,我可以看到错误,但是为什么会出现这个错误,以及如何解决它 错误在代码公共A(int t)上突出显示,并显示 类B中的构造函数B不能应用于给定的类型,需要int,找不到任何参数,原因是实际参数和形式参数列表的长度不同 代码如下: public class Test { public static void main(String[] args) { B b = new
公共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");
}
}
您需要调用超类的构造函数作为
A(int)
中的第一条语句:
当您的
super类
具有args构造函数
且没有无args构造函数时,您必须使用子类构造函数的super(args)
调用显式调用它
class A extends B {
public A(int t) {
super(t);
System.out.println("A's constructor is invoked");
}
}
类B已经定义了构造函数,所以它没有公共隐式默认构造函数(没有参数)。如果零参数超类构造函数不可用,则所有子类构造函数必须通过
super(t)
显式调用超类构造函数。类B只有一个构造函数采用int
参数。另一方面,类A中的构造函数(隐式)尝试调用A的超类(即B)中不带参数的构造函数。这就是错误的原因。至少有两种方法可以解决此问题:
super
关键字执行此操作a
和B
之间有一个契约,a
必须调用B
的构造函数,将int
值传递给它…更新a
s构造函数以包含super(t)代码>作为第一句话谢谢你的回答。我明白,但我也问自己为什么?为什么子类构造函数必须显式调用超类构造函数?这是什么原因?对不起,所有的问题。它需要尊重家长类的需要。父类simple说,“如果不向我提供此信息,就不能实例化我”。子类有权创建具有或多或少参数的新构造函数,但它必须满足父类的要求。错误消息非常清楚。你不明白什么?非常感谢大家。@JohnW一定要对你觉得有用的答案进行投票,并接受其中一个作为“官方”答案。谢谢你的回答。我明白,但我也问自己为什么?为什么子类构造函数必须显式调用超类构造函数?这是什么原因?对不起,有这么多问题。@JohnW是关于合同的。超类可以有一些“不变量”——一些属性总是真的,比如“fieldx
不是null
”。如果不调用构造函数,就无法确保它们,其他应用程序也无法依赖它们。
class A extends B {
public A(int t) {
super(t);
System.out.println("A's constructor is invoked");
}
}