eu fiz o debug dele para tentar entender ele, eu ñ entedi pq quando ele vai executar ele chega na linha 24 vai para 11 executa a 23 vai para 11 e vai para 9, pq ele ñ vai para a 22? ele Ñ deveria ir para a 22 eu ñ entendi essa parte, alguem poderia me dar uma ajuda nessa parte para eu entender a execução desse programa.
Obrigado.
O método mudaZ na classe A tem acesso privado, o que quer dizer que mudaZ da classe B não sobreescreve ao método, é um totalmente independente, mas com mesmo nome.
Como o calculaS é um método de A, e não há sobreescrita de mudaZ em B, ele usa o mudaZ de A mesmo.
Se lá no main tivesse chamado b.mudaZ() direto, aí teria pegado o da linha 22.
G
gardussi
Então se o CalculaS é da Classe A ele ñ deveria usar o muda X e Y da A ao inves da B?
B
Bruno_Laturner
Não, por que esses dois são sobreescritos. A implementação dos métodos que vale é aquela em B. Os métodos de A são “apagados” para aquele objeto quando uma subclasse que os sobreescrevem é instanciada.
Se fosse A a = new A();, ou um A c = new C(); onde este C não sobreescrevesse os métodos, então ele usaria os de A.
pelissoni
Então cara isso seria dessa forma, mas você Herdou os metodos da CLasse A quando fez
class B extends A{}
ela herdou os métodos tambem, o calculaS ta escrito na classe A, como a classe B herda métodos da a ela fez o seguinte quando vc executa b.calculaS
você está dizendo que B é uma A, e vai procurar esse método, ai ele vai usar os atributos da Classe B, se você não quer isso, vc tira o extends A da classe B e instancia um A a = new A(); na classe redefinição
talvez eu tenha deixado meio complicado, qq coisa fala ai, que eu tento explicar melhor
G
gardussi
Agora com oq vc 2 me explicaram clariou bem mais, eu ja consigui enter ±, mas ai eu fiquei com uma duvida, se ele esta instanciado de B pq na hora de executar a linha 11 ele ñ deveria pegar o Muda x, muda y e muda z de B? só que ele so pego so a linha 23 e 24, a 22 ñ ele vai na classe A e pega a 9 se ele é uma instancia de B mesmo herdando de A ele ñ deveria executar as 22, 23 e 24 da B, a minha duvida agora é pq ele pega o muda Z de A e não o de B
pelissoni
Então cara faz assim …
pega cada uma das Classes e cria um arquivo pra cada uma, e faz assim, os Atributos, vc deixa sempre como PRIVATE, e os Métodos PUBLIC, PROTECTED é o meio termo dos 2, ai vc consegue ter uma visão melhor, foi o que o nosso amigo disse vc deixou um método privado ai ele faz isso que aconteceu com vc.
resumindo evite o uso do protected;
deixe os atributos privados, use getters e setters para pegar/atribuir os valores do mesmo e todos os métodos publicos,
pois assim vc se perde menos, claro que essas regrinhas são aplicaveis dependendo da situação.
qq duvida posta ai
G
gardussi
Kara vlw pela dica, é q eu estava estudando ai eu me deparei com esse programa q de aparencia era de simples para entender ai quando eu joguei para debugar ele eu fiquei com essa duvida do pq ele pegar um unico metodo da classe A sendo q foi tudo instanciado em B, mas eu vou tentar fazer isso q vc disse para ver. vlw obrigado pela ajuda