我正在编写一个Triangle类的两个构造函数,该构造函数将参数作为参数:一个String,一个整数和一个double数组
private double [] side = new double[3];
public Triangle() {
this("",0,side);
//Here I have a compile error says "Cannot refer to an instance field side while explicitly invoking a constructor"
}
public Triangle(String color, int opacity,double [] side) {
super(color, opacity);
this.side = side ;
}
在主要方法中,我想初始化三角形,但直到现在我还是无法这样做。
我尝试了这两种方式,但没有一种有效
GeoShapes[1] = new Triangle( "Red" , 89 , {2,4,3} ) ;
GeoShapes[2] = new Triangle( "white", 68 , new double{5,6,3} );
注意:我确实尝试过初始化一个数组,然后将其引用放在第三个参数中,它可以工作,但这不是我所需要的
有谁能帮我在第三个参数中写什么?
您必须像这样使用它:
geoShapes[1] = new Triangle("Red" , 89 , new double[] {2,4,3});
您只能在声明时或与数组创建表达式一起使用数组初始化器。
另一种选择是varargs
用作参数类型:
public Triangle(String color, int opacity, double... side) {
super(color, opacity);
this.side = side ;
}
那么您可以使用以下方法创建实例:
geoShapes[1] = new Triangle("Red", 89 , 2, 4, 3);
关于0-arg构造函数中的问题:
public Triangle() {
this("",0,side);
}
您正在尝试将实例字段传递side
给参数化的构造函数,该构造函数无效,因为side
尚未初始化。所有的初始化工作都完成后,this()
或super()
调用。您应该像通常那样创建一个数组并传递它。所以这将工作:
public Triangle() {
this("", 0, new double[] {0, 0, 0});
}
并且请遵循正确的Java命名约定。变量名称以小写字母开头。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句