Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Não entendi.

Não entendi muito bem o exercício, pra mim não está compilando por causa que o atributo não está tipado (int, String, etc) e por ele ser privado. Poderia me explicar melhor.

Thank you ;)

3 respostas

Olá Renato,

o atributo está tipado sim, o tipo dele é Componente. Ao criar uma classe e instanciá-la, você cria um objeto que será do tipo daquela classe. Quanto a ser privado, não é um problema pois ele só está sendo chamado dentro da própria classe - ele só não é visto fora da classe.

O código é o seguinte:

public class Jogo {
    //Código omitido
    private Componente comp;

    public Jogo(Usuario usuario){
       this.comp = usuario;
    }
}

e a linha da atribuição é a

this.comp = usuario;

Porém o atributo compé um objeto do tipo Componente enquanto usuario é um objeto do tipo Usuario e você não pode atribuir um ao outro, ou seja, eles são objetos diferentes!

Tipos como String, int são do próprio java (por exemplo, Classe String) mas ao criar uma classe e instanciar, você cria um novo objeto do tipo da sua classe.

Espero que tenha compreendido... qualquer coisa manda aqui que a gente dá uma força ;)

solução!

Opa, Renato.

public class Jogo {
    //Código omitido
    private Componente comp;
    public Jogo(Usuario usuario){
       this.comp = usuario;
    }
}

O atributo comp está tipado! O tipo é Componente.

O fato de ser private impede o acesso (pra leitura e escrita) de outras classes. Como o código está no construtor da própria classe Jogo, o acesso ao atributo comp é permitido.

O erro é que estamos tentando pôr um Usuario em um atributo do tipo Componente. Não encaixa!

Por isso, a resposta é:

Está sendo feita uma atribuição de objetos de tipos diferentes.

Tais e Alexandre, muito obrigado pela ajuda. ;)