1

我有以下代码,它不会编译。

public class P {
    private int num;
    P(int n) {
        this.num = n;
    }
}

public class Q extends P {
    private int i;
    public Q() {
        i = 0;
    }
}

修复第二种方法,使其可以编译。

4

3 回答 3

1

您需要添加默认构造函数P以使其编译

P() {
  this.num = 0; // some default value
}
于 2013-08-04T03:08:25.243 回答
1

调用超级构造函数:

public Q() {
    super(42);  // <--
    i = 0;
}

super 您可以在此处阅读更多信息。

于 2013-08-04T03:16:22.570 回答
0

在代码中编译器在 Q 类中写了 super() 关键字,时间控制将转到 P 类并调用构造函数,但是 P 类有一个参数构造函数。所以你可以添加带有任意数字的 super() 关键字,因为P 类构造函数有一个 int 类型的参数。

  class P {
  private int num;
  P(int n) {
    this.num = n;
   }
  }
 public class Q extends P {
  private int i;
  public Q() {
    super(20);
    i = 0;
   }
     }
于 2013-08-04T08:21:49.383 回答