public class ZH01 { public int i = 1; ZH01(int m){ i = 1; } } class Fd extends ZH01{ Fd(int i){ this.i = 2; } }为什么会编译错误
时间: 2023-06-20 16:07:23 浏览: 83
这段代码会编译错误,因为子类 `Fd` 没有显式调用父类 `ZH01` 的构造函数。当父类没有提供无参构造函数时,子类必须显式地调用父类的构造函数,否则编译器会默认调用父类的无参构造函数,而这里父类没有提供无参构造函数,所以编译会报错。
可以通过在子类构造函数中使用 `super` 关键字来显式调用父类的构造函数,如下所示:
```
public class ZH01 {
public int i = 1;
ZH01(int m) {
i = 1;
}
}
class Fd extends ZH01 {
Fd(int i) {
super(i); // 调用父类的构造函数
this.i = 2;
}
}
```
这样就可以解决编译错误了。
相关问题
public class ZH01 { public int i = 1; ZH01(int m) { i = 1; } } class Fd extends ZH01 { Fd(int i) { super(i); // 调用父类的构造函数 this.i = 2; } }m的作用是什么
在代码中,参数 `m` 被传递给了 `ZH01` 类的构造函数。但是,在 `ZH01` 类中,`m` 没有被使用,构造函数中的 `i = 1` 语句将成员变量 `i` 的值设置为 1。
在 `Fd` 类中,它继承了 `ZH01` 类,并且在它的构造函数中调用了 `super(i)`,这将调用父类 `ZH01` 的构造函数,并传递参数 `i`。然而,在 `ZH01` 类中,构造函数没有使用参数 `i`,所以传递参数 `i` 没有实际的意义。
在 `Fd` 类的构造函数中,通过 `this.i = 2` 将 `Fd` 类的成员变量 `i` 的值设置为 2。这个 `i` 变量与 `ZH01` 类的 `i` 变量没有任何关系。
阅读全文