我有一个魔方课,内容如下:public class Rubik{ private int[][][] grid; protected Face[] cube; protected Face up; protected Face left; protected Face front; protected Face right; protected Face down; protected Face back; private static String dots = "......"; private String output; //Constructor public Rubik(int[][][] grid){ int[][][] copy_grid = new int[6][3][3]; for (int k = 0; k < 6; k++){ for (int i = 0; i < 3; i++){ for (int j = 0; j < 3; j++) copy_grid[k][i][j] = grid[k][i][j]; } } this.grid = copy_grid; this.up = new Face(grid[0]); this.left = new Face(grid[1]); this.front = new Face(grid[2]); this.right = new Face(grid[3]); this.down = new Face(grid[4]); this.back = new Face(grid[5]); this.cube = new Face[]{this.up, this.left, this.front, this.right, this.down, this.back}; }我正在尝试创建一个扩展 Rubik 的 RubikRight 类,并且 RubikRight 的定向方式使得原始 Rubik 的右面现在面向前方。这就是我为 RubikRight 定义构造函数的方式:public class RubikRight extends Rubik{ //Constructor public RubikRight(int[][][] grid){ int[][][] copy_grid = new int[6][3][3]; for (int k = 0; k < 6; k++){ for (int i = 0; i < 3; i++){ for (int j = 0; j < 3; j++) copy_grid[k][i][j] = grid[k][i][j]; } } this.grid = copy_grid; this.up = new Face(grid[0]); this.left = new Face(grid[2]); this.front = new Face(grid[3]); this.right = new Face(grid[5]); this.down = new Face(grid[4]); this.back = new Face(grid[1]); this.cube = new Face[]{this.up, this.left, this.front, this.right, this.down, this.back}; }我可以知道为什么我似乎无法这样定义 RubikRight 吗?
2 回答
繁星淼淼
TA贡献1775条经验 获得超11个赞
每当实例化子类对象时,都会隐式调用父类默认构造函数。因此,当您RubikRight通过调用它来实例化时,会从 RubikRight 的构造函数内部new RubikRight(int[][][])隐式调用。super()因此出现错误:
required: int[][][] // what you have in Rubik class, note that you don't have the default constructor
found: no arguments // super(/* no argument */) called implicitly
要消除错误,您有两种选择:
要么super(grid)从RubikRight构造函数显式调用。
或者,在(基)类中实现默认构造函数Rubik。
紫衣仙女
TA贡献1839条经验 获得超15个赞
您没有调用父类的构造函数。
这里你可以做的是,重载父类中的构造函数。创建默认构造函数(无参数构造函数)并使其受保护。
public class Rubik{
...
protected Rubik() {
}
}
这应该可以解决你的问题。
添加回答
举报
0/150
提交
取消