Não consigo passar uma matriz como referência para ser usado em outra classe. JAVA

Olá! Estou fazendo um projeto em JAVA para faculdade de jogo da velha. Existe uma classe tabuleiro onde as jogadas serão feitas pelo jogador(classe) e pelo computador (classe), obviamente as jogadas terão que ser feitas no mesmo objeto do tipo tabuleiro.

O que acontece é que eu não consigo criar essa interação entre jogador e tabuleiro, pois não consigo passar a minha matriz que pertence a classe tabuleiro para a classe jogador, onde tem o método jogar. Esse método jogar precisa da matriz para que possa ocorrer a interação(manipular a matriz).

Em resumo é que eu não consigo referenciar uma matriz em outra classe.

Já tentei de várias formas, já pesquisei, assisti vídeos, mas nada trata desse problema em específico. Ps: A classe computador não foi implementada ainda, mas se eu conseguir resolver esse problema na classe jogador fazer o mesmo na classe computador é mais fácil.
O código está sem nenhuma tentativa de resolver esse problema para que fique mais fácil o entendimento.

package lab;

public class Tabuleiro {
protected String tabuleiro[][] = new String[3][3];

public Tabuleiro() {
	
	tabuleiro[0][0] = "A1";
	tabuleiro[0][1] = "A2";
	tabuleiro[0][2] = "A3";
	tabuleiro[1][0] = "B1";
	tabuleiro[1][1] = "B2";
	tabuleiro[1][2] = "B3";
	tabuleiro[2][0] = "C1";
	tabuleiro[2][1] = "C2";
	tabuleiro[2][2] = "C3";
}

public String[][] getTabuleiro() {
	return tabuleiro;
}

public void setTabuleiro(String[][] tabuleiro) {
	this.tabuleiro = tabuleiro;
}



public void Mostrar() {
	for (int i = 0; i < tabuleiro.length; i++) {
		for (int j = 0; j < tabuleiro[i].length; j++) {
			System.out.print(tabuleiro[i][j] + " ");
		}
		System.out.println();
	}
	System.out.println();
	
}

public void VisualizarJogo() {

	tabuleiro[0][0] = "A1";
	tabuleiro[0][1] = "A2";
	tabuleiro[0][2] = "A3";
	tabuleiro[1][0] = "B1";
	tabuleiro[1][1] = "B2";
	tabuleiro[1][2] = "B3";
	tabuleiro[2][0] = "C1";
	tabuleiro[2][1] = "C2";
	tabuleiro[2][2] = "C3";
	
	for (int i = 0; i < tabuleiro.length; i++) {
		for (int j = 0; j < tabuleiro[i].length; j++) {
			System.out.print(tabuleiro[i][j] + " ");
		}
		System.out.println();
	}
	System.out.println();
}

}

package lab;

import java.util.Scanner;

public class Jogador extends Tabuleiro {

public void Jogar(){
		
		Scanner scan = new Scanner(System.in);
		System.out.print("Escolha sua jogada: ");

		String jogada = scan.nextLine();
		

		switch (jogada ) {
		
		case "A1":
			if (tabuleiro[0][0].equals("O") || tabuleiro[0][0].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[0][0] = "O";

			}
			break;
		case "A2":
			if (tabuleiro[0][1].equals("O") || tabuleiro[0][1].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[0][1] = "O";
			}
			break;
		case "A3":
			if (tabuleiro[0][2].equals("O") || tabuleiro[0][2].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[0][2] = "O";
			}
			break;
		case "B1":
			if (tabuleiro[1][0].equals("O") || tabuleiro[1][0].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[1][0] = "O";
			}
			break;
		case "B2":
			if (tabuleiro[1][1].equals("O") || tabuleiro[1][1].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[1][1] = "O";
			}
			break;
		case "B3":
			if (tabuleiro[1][2].equals("O") || tabuleiro[1][2].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[1][2] = "O";
			}
			break;
		case "C1":
			if (tabuleiro[2][0].equals("O") || tabuleiro[2][0].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[2][0] = "O";
			}
			break;
		case "C2":
			if (tabuleiro[2][1].equals("O") || tabuleiro[2][1].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[2][1] = "O";
			}
			break;
		case "C3":
			if (tabuleiro[2][2].equals("O") || tabuleiro[2][2].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[2][2] = "O";
			}
			break;

		default:
			System.out.println("ATENÇÃO: JOGUE APENAS CONFORME OS DADOS FORNECIDOS NA TABELA. JOGUE NOVAMENTE!  ");
			Jogar();
			break;

		}

	
}

}

Olá!
Já testou se no lugar de estender a classe Tabuleiro você ter um atributo objeto dela?
Na lógica, Jogador não é um tabuleiro.
Você pode ter uma classe Jogador, uma Tabuleiro e uma classe Jogo por exemplo.
Cada uma teria sua responsabilidade e você poderia passar o objeto tabuleiro como argumento.Talvez ajude a resolver o problema e você estará aplicando uma boa prática de programação. Espero ter ajudado.

1 curtida

Obrigado pela resposta!
Realmente Jogador não é tabuleiro, fiz isso porque não conseguia justamente relacionar os dois.
Acho bacana a criação da classe jogo, pensei me fazer isso mesmo. O problema é que eu não consigo/não sei criar esse atributo na classe tabuleiro e depois usar ele como argumento, por exemplo no meu método jogar.
Eu queria justamente saber como passar um objeto tabuleiro para métodos fora da classe de tabuleiro.

É algo básico, acredito eu, mas fiquei tanto tempo sem interagir com JAVA que estou bem perdido agora.

Caso eu não tenha sido claro é só falar e obrigado pela resposta