-1

我有一个魔方课程,内容如下:

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};
    }

但是,我收到错误消息

Constructor Rubik in class Rubik cannot be applied to the given type;
  public RubikRight(int[][][] grid){
                                     ^
  required: int[][][]
  found: no arguments
  reason: actual and formal argument lists differ in length
1 error

我可以知道为什么我似乎不能那样定义 RubikRight 吗?

4

2 回答 2

1

每当您实例化子类对象时,都会隐式调用父类默认构造函数。因此,当您RubikRight通过调用new RubikRight(int[][][])它进行实例化时,它会隐式调用super()RubikRight 的构造函数内部的 。因此错误:

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

要消除错误,您有两种选择:

  1. super(grid)RubikRight构造函数显式调用。
  2. Rubik或者,在(基)类中实现默认构造函数。
于 2019-09-12T05:45:23.353 回答
0

您没有调用父类的构造函数。

你可以在这里做的是,在父类中重载构造函数。创建默认构造函数(无参数构造函数)并使其受到保护。

public class Rubik{
  ...
  protected Rubik() {
  }
}

这应该可以解决您的问题。

于 2019-09-12T05:34:51.060 回答