猿问

创建 Rubik 类的子类,名为 RubikRight

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


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 吗?


开满天机
浏览 114回答 2
2回答

繁星淼淼

每当实例化子类对象时,都会隐式调用父类默认构造函数。因此,当您RubikRight通过调用它来实例化时,会从 RubikRight 的构造函数内部new RubikRight(int[][][])隐式调用。super()因此出现错误:required: int[][][] // what you have in Rubik class, note that you don't have the default constructorfound: no arguments // super(/* no argument */) called implicitly要消除错误,您有两种选择:要么super(grid)从RubikRight构造函数显式调用。或者,在(基)类中实现默认构造函数Rubik。

紫衣仙女

您没有调用父类的构造函数。这里你可以做的是,重载父类中的构造函数。创建默认构造函数(无参数构造函数)并使其受保护。public class Rubik{&nbsp; ...&nbsp; protected Rubik() {&nbsp; }}这应该可以解决你的问题。
随时随地看视频慕课网APP

相关分类

Java
我要回答