重载子类的构造函数

sad*_*iwi 0 java inheritance this super

比如说我有一Circle堂课:

static final double DEFAULT_RADIUS = 1.0;

Circle(Point centre, double radius) {
    this.centre = centre;
    this.radius = radius;
}

Circle(Point centre) {
    this(centre, Circle.DEFAULT_RADIUS);
}

// ...
Run Code Online (Sandbox Code Playgroud)

然后在ColoredCircle,一个子类Circle

ColoredCircle(Point centre, Color color, double radius) {
    super(centre, radius);
    this.color = color;
}

ColoredCircle(Point centre, Color color) {
    // ???
}
Run Code Online (Sandbox Code Playgroud)

的第二个构造函数应该ColoredCircle怎么做?

  • this(centre, color, Circle.DEFAULT_RADIUS);
  • super(centre, Circle.DEFAULT_RADIUS); this.color = color;

我认为两者都可以,但这会导致“更干净的代码”?

azu*_*rog 6

您的两个示例都有些多余,因为Circle已经有一个将半径设置为默认值的构造函数。

我建议你使用它,让你的构造函数像这样:

super(centre);
this.color = color;
Run Code Online (Sandbox Code Playgroud)