public class CircleGeometricObject extends GeometricObject {
private double radius;
public CircleGeometricObject() {}
public CircleGeometricObject(double radius) {
this. radius = radius;
}
public CircleGeometricObject(double radius, String color, boolean filled) {
this. radius = radius;
setColor(color);
setFilled( filled);
}
}
问问题
78 次
3 回答
3
如果您想减少代码重复,您可以执行以下操作(尽管添加一些空值检查)。对于您的示例,它可能超出了顶部,但对于具有大量代码的构造函数来说,减少重复可能很有用。
public class MyClass {
private Double radius;
public MyClass() {
this(null, null, null);
}
public class MyClass(Double radius) {
this(radius, null, null)
}
public class MyClass(Double radius, String colour, boolean filled) {
this.radius = radius;
setColour(colour);
setFilled(filled);
}
}
** 编辑将 double 更改为 Double 以允许 null
于 2013-04-19T20:36:16.997 回答
1
我不确定是否能正确理解这个问题。你问为什么你必须重写GeometricObject 的构造函数?
以下代码编译不是强制性的:
public class CircleGeometricObject extends GeometricObject
{
private double radius;
public CircleGeometricObject(double radius, String color, boolean filled)
{
this.radius = radius;
setColor(color);
setFilled(filled);
}
}
您实现所需的构造函数。
于 2013-04-19T20:46:05.483 回答
0
不得不创建一个测试用例,因为它已经很长时间了,而且这总是一种模糊的区域:
public class ConstrTest {
protected String fieldA;
protected String fieldB;
public static void main(String[] argV) {
ConstrTestSub sub1 = new ConstrTestSub("111", "222");
sub1.print();
// ConstrTestSub sub2 = new ConstrTestSub();
// sub2.print();
}
public ConstrTest() {
this("ABC","XYZ");
}
public ConstrTest(String a) {
this(a, "YYY");
}
public ConstrTest(String a, String b) {
fieldA = a;
fieldB = b;
}
public void print() {
System.out.println("fieldA = " + fieldA + ", fieldB = " + fieldB);
}
}
class ConstrTestSub extends ConstrTest {
private String fieldC;
public ConstrTestSub(String a, String b) {
super(a, b);
fieldC = "QQQ";
}
public void print() {
System.out.println("fieldA = " + fieldA + ", fieldB = " + fieldB + ", fieldC = " + fieldC);
}
}
上面的代码编译并运行良好,并且 ConstTestSub 构造函数适当地执行相应的版本(即使没有显式调用super
它也会这样做)。super
但是,如果您取消注释new ConstTestSub
main 中的第二个,它将不会编译,因为()
未定义构造函数的版本。
所以,如果你要定义你的构造函数,并且如果你需要多个表单,你必须定义所有你需要的表单。(当然,如果足够的话,它们可以级联。)
于 2013-04-19T20:59:44.383 回答