Alguem pode me explicar porque o resultado deste programa é 1? Tudo bem eu não reescrevi o método na Classe2 mas reescrevi o atributo então quando herdei da Classe1 o metodo getNum1 foi pra “dentro” da Classe2, que tinha o atributo num1 que era =2, então porque ele não retornou este??
Podem me esclarecer melhor!!
Você simplesmente está criando um objeto da classe 2. Certo?
Então você usa a referência a esse objeto através da variável ‘n’.
Esse ‘n’ vai acessar um método da classe 2, que herda tudo da classe 1. Ou seja, falamos do método getNum1(). Esse método, usado para pegar a variável ‘num1’, corresponderá ao escopo da classe2. E não mais da classe 1, pois dentro da 2 você sobrepôs essa variável ‘num1’.
danielbussade
Esse método, usado para pegar a variável ‘num1’, corresponderá ao escopo da classe2. E não mais da classe 1, pois dentro da 2 você sobrepôs essa variável ‘num1’.
Então Giancarlo eu sobrepôs a variavel num1 na classe2 e atribui a ela o valor 2, só que este programa me retorna 1 que é o valor da varíavel definida no escopo da Classe1.
Porquee, ele retorna este valor???
Obrigado
GiancarloBraga
Ah, ele está retornando 1?
Uai.
Então analisei errado(na pressa).
Me desculpe.
Então, creio que nesse caso de herança então não tenha essa de atribuição. Quando você invoca o método getNum1 ele pertence ao escopo da classe Num1, onde o valor dessa mesma variável é 1, por isso retorno 1.
Você deveria alterar, através de um método, o valor do atributo num1.
Como o atributo é protected, por regra da OO ele só pode ser acessado através de métodos da superclasse ou subclasse.
Segue um exemplo:
Na minha opinião o correto seria reescrever o metodo e eu usaria tb polimorfismo( no caso de vc querer adicionar mais alguma funcionalidade a sua classe, no futuro ). esse atributo da Classe2 tb seria excluido, pois já existe esse msm atributo na Classe1.
se for necessario posto o codigo…
edmarr
Resumindo
se vc tivesse o codigo ;
lass Classe2 extends Classe1 {
protected int num1=2;
public void getNum1(){
return num1;
}
}
Dai então vc receberia o valor que vc estava imaginando , ou seja
como vc ta extendendo uma classe , ela simplesmente vai subir a hierarquia para poder verificar se existe o método antes de lançar uma Exception.