Opa, é o seguinte, desculpem se o titulo ficou meio confuso. Mas então, estou com o seguinte problema, estou em meio a um “projetinho” aqui e vou tentar explicar bem.
Tenho a Classe “Start” que é a ‘main’.
A Classe ‘Jogo’ que é instanciada pela ‘Start’.
A Classe ‘Personagem’ que é abstrata.
E a Classe ‘Heroi’ que herda a ‘Personagem’.
Na classe Jogo eu tenho um metodo que executa um tipo de sorteio que chama outra classe que seguindo em frente forma um Factory; Mas talvez não precise explicar tudo. Mas então, eu no meio da implementação percebi que minha Classe final do Factory não estava alterando a Classe Heroi que ela deveria setar. Resumi o problema com a criação de outra classe teste sem a Factory, e o problema persistiu. Enfim, expliquei por completo pra quer talvez possam entender pq eu nao instancio logo na main tudo e etc…
Em código ta assim:
public class Jogo {
public static void main(String[] args) {
Heroi h = new Heroi();
Masmorra m = new Masmorra();
acesso a = new acesso();
// m.inicio();
m.teste();
m.set(56);
m.teste();
m.set(34);
m.teste();
a.setAcesso();
m.teste();
}
}
public abstract class Personagem {
private String nome;
private int nivel;
private int vida;
private int ataque;
public Personagem(String nome, int nivel, int vida, int ataque){
this.nome = nome;
this.nivel = nivel;
this.vida = vida;
this.ataque = ataque;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getNivel() {
return nivel;
}
public void setNivel(int nivel) {
this.nivel = nivel;
}
public int getVida() {
return vida;
}
public void setVida(int vida) {
this.vida = vida;
}
public int getAtaque() {
return ataque;
}
public void setAtaque(int ataque) {
this.ataque = ataque;
}
}
public class Heroi extends Personagem{
public Heroi(){
super("Heroi", 1, 10, 1);
}
}
public class Masmorra{
//GameObject game;
Heroi heroi = new Heroi();
//Monstro monstro = new Monstro();
public void teste(){
System.out.println(heroi.getAtaque());
}
public void set(int n){
heroi.setAtaque(n);
}
}
public class acesso extends Masmorra {
public void setAcesso(){
heroi.setAtaque(9);
teste();
set(89);
teste();
}
}
Pronto, tipo, não existe erro ao dar Run, apenas a saida não é esperado. A saida esta sendo essa:
1 //valor instanciado no metodo construtor super();
56 // valor setado diretamente pelo objeto instanciado no main
34 // novo valor setado no main
9 // valor setado pela classe 'acesso'
89 //novo valor setado pela classe 'acesso'
34 // agora o problema, esse é só o imprimir do ultimo valor do 'Ataque', ele imprime o ultimo setado pelo main, e não o setado pela classe 'acesso'.
Na verdade não quero instancia nada na classe main, apenas o ‘Masmorra’ então eu instancio o ‘Heroi’ dentro do ‘Masmorra’ e todas classes que extends de ‘Masmorra’ consegue dar “heroi.setAtaque”. BLZ! Entretanto, quando vou utilizar os dados do ‘Heroi’ em outra ação ele ainda está " 1 " que é o valor do construtor, e não o valor que a classe que herda Masmorra setou!
Espero não ter metido pés pelas mãos tentando explicar!
Se precisar posto o codigo original do projeto, ou seja, com Factory, a ideia em si e etc…