1)为什么必须对V类完全使用构造函数?AFAIK不需要创建构造函数,因为JAVA编译器会自动创建默认构造函数以继续其操作。同样从消息中,似乎还需要一个默认的构造函数,但不是我编写的,但是正如我所说的,JAVA不会自动创建它吗?
仅当不存在其他构造函数时才创建默认构造函数,当您创建该构造函数时,将Check(int i,int j)
删除默认构造函数。
如果在构造函数中未包含对super的调用,则java会super()
默认尝试进行调用。但是,由于父类中没有默认构造函数,因此无法执行此操作。
这种行为是好的,因为您可能不需要默认的构造函数。某些变量可能 初始化才能使对象正常运行。因此,需要一种删除默认构造函数的方法,这是通过显式创建构造函数来完成的。
2)另一件事,我将子类中的代码更改为V(int i,int j){super.a = i; super.b = j}。,但是我仍然遇到错误。这是为什么?这个代码不是super.a = i; super.b = j与super(i,j)一样吗?另外,在V类中,我可能不需要使用b,那么为什么我需要通过构造函数对其进行初始化?
V(int i, int j){
super.a=i; super.b=j
}
V(int i, int j){
super();
super.a=i; super.b=j
}
再一次,super()不存在
必须存在对super的一些调用才能“设置”对象的父部分,一直到Object(所有对象隐式扩展)。因此,您不能仅仅因为您在子构造函数中执行了等效的操作就忽略了父构造函数