I 类加一个 I(int x) 的构造器,或者 K 类加一个无参构造器,就可以了:
public I(int x){
super(x);
}
原因:
在类中,当不手动添加构造器时,默认都有一个无参数的构造器,当手动添加了构造器时,默认的无参数的构造器就没有了。
子类默认会去调用父类相同参数的构造器
K 类手动写了含一个参数的构造器,默认的无参构造器就没有了。I 类没有手动写构造器,所以默认有一个无参数的构造器。所以 I 类无参数的构造器会去调用 K 类无参数的构造器,而 K 类没有无参数构造器,所以报错。
解决方案:
第一种方案是 K 类手动添加一个无参数构造器
第二种方案是 I 类手动添加一个含一个 int 参数的构造器
的三种方案是 I 类中在无参数构造器中手动去调用 K 类中的 K(int x) 构造器