-1

I have a Rubik class with the following:

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

And I am trying to create a RubikRight class which extends the Rubik, and RubikRight is orientated in such a way that the right face of the original Rubik is now facing front. This is how I am defining my constructor for 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};
    }

However, I am getting the error which says

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

May I know why is it that I can't seem to define RubikRight that way?

squirrel
  • 309
  • 2
  • 11

2 Answers2

1

Whenever you a instantiate a child class object the parent class default constructor is called implicitly. So, when you instantiated RubikRight by calling new RubikRight(int[][][]) it implicitly called the super() from inside the RubikRight's constructor. And hence the error:

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

To remove the error, you have two options:

  1. Either call super(grid) from RubikRight constructor explicitly.
  2. Or, implement the default constructor in the Rubik (base) class.
kumarchandresh
  • 559
  • 2
  • 16
0

You are not calling constructor of parent class.

What you can do here is, overload constructor in parent class. Create default constructor (no parameter constructor) and make it protected.

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

This should solve your problem.

Mukund Desai
  • 100
  • 2