隐式超级构造函数Peca()未定义。必须显式调用另一个构造函数

问题描述 投票:0回答:1

我有5个文件.java:Validador.java,Peca.java,Tabuleiro.java,Rainha.java和Nada.java。

Validador.java:

public class Validador {
    public static void main(String[] args) {
        if(args.length == 0) { // sem argumentos

            Tabuleiro tab = new Tabuleiro("DD--"); 
           Peca peca = tab.peca(0,0); 
            System.out.println(peca.podeIrPara(1,1));


        }else if (args[0].equals("filtro")) { // argumento filtro

        }
    }
}

Peca.java:

public abstract class Peca {
    int linha;
    int coluna;
    Tabuleiro tab;
    boolean isNada;

     Peca(Tabuleiro tab, int linha, int coluna) {
        this.tab = tab;
        this.linha = linha;
        this.coluna = coluna;
    }


    boolean vazia() {
        if(isNada) {
            return true;
        }else {
            return false;
        }
    }

    boolean podeIrPara (int linha, int coluna) { // ver se se pode mover para uma posicao
       System.out.println(tab.tamanho_tabuleiro);

        return true;
    }

}

Tabuleiro.java:

public class Tabuleiro extends Peca {
      char tabuleiro_array[][];
      int tamanho_tabuleiro;

 (it shows an error here) --->   Tabuleiro(String repr){ 
        int tamanho_tabuleiro = (int)Math.sqrt(repr.length());
        this.tamanho_tabuleiro = tamanho_tabuleiro;
        char[][] tabuleiro_array = new char[tamanho_tabuleiro][tamanho_tabuleiro]; //cria um tabuleiro
        int coluna = 0;
        int linha = 0;

        for(int i = 0; i < repr.length(); ++i) {
            char ch = repr.charAt(i);
            if(ch == 'D' || ch == '-') {
                tabuleiro_array[linha][coluna] = ch;
                coluna++;
        }
        if(coluna == tamanho_tabuleiro) {
            coluna = 0;
            linha++;
        }
    }
    this.tabuleiro_array = tabuleiro_array;

  }

Rainha.java

public class Rainha extends Peca {
    Rainha(Tabuleiro tab, int linha, int coluna) {
        super(tab, linha, coluna);
        super.isNada = false;
        super.coluna = coluna;
        super.linha = linha;
        super.tab = tab;

    }
}

Nada.java:

public class Nada extends Peca {
    Nada(Tabuleiro tab, int linha, int coluna) {
        super(tab, linha, coluna);
        super.isNada = true;
        super.coluna = coluna;
        super.linha = linha;
        super.tab = tab;
    }
}

[当我尝试运行代码时,出现此错误:

Implicit super constructor Peca() is undefined. Must explicitly invoke another constructor

        at Tabuleiro.<init>(Tabuleiro.java:5)
        at Validador.main(Validador.java:5)

我是一名大学生,我真的需要交付这个项目……有人知道如何解决这个问题吗?

java constructor superclass
1个回答
0
投票

Peca.java中,添加此构造函数:

public abstract class Peca {
    int linha;
    ...
    Peca(){}
    ...
}

这是因为从主类Tabuleiro(String repr)调用Tabuleiro tab = new Tabuleiro("DD--");也会显式调用超类的(Peca在您的情况下)构造函数,并且由于您未提供任何构造函数,因此Java将插入对超类的无参数构造函数,即super();就像您在做的一样:

Tabuleiro(String repr){
    super();

    int tamanho_tabuleiro = (int)Math.sqrt(repr.length());
    ...
}

由于未定义,因此您将看到编译时错误。

© www.soinside.com 2019 - 2024. All rights reserved.