为了账号安全,请及时绑定邮箱和手机立即绑定

创建 Rubik 类的子类,名为 RubikRight

创建 Rubik 类的子类,名为 RubikRight

开满天机 2023-07-28 09:58:32
我有一个魔方课,内容如下: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。


查看完整回答
反对 回复 2023-07-28
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

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


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


public class Rubik{

  ...

  protected Rubik() {

  }

}

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


查看完整回答
反对 回复 2023-07-28
  • 2 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信