A minha duvida é a seguinte:
Sei que a variável type foi sobrescrita e agora vale j, mas na impressão existe uma chamada a super, não era pra imprimir c???
Interessante, mas pelo que entendi, como Javanese extende de Cat, ela passou a ter o atributo type da classe Cat, entao esse atributo passou a pertencer tambem a Javanese, como se fosse da sua propria classe.
Quando executa new Javanese(), a classe Cat é executada primeiro, pois Javanese extends de Cat. Cat então executa o seu metodo construtor exibindo a mensagem “cat”; depois a sequencia volta para a Classe Javanese executando o metodo go(), que sobrescreve type (essa sobrescrita tambem aconteceu lá na Classe cat) “c” passou a ser “j”. Aí finalmente exibe. Quando deu super.type, type já estava sobrescrito
L
LeandroMartins
Não era pra imprimir “c” porque o atributo type é um só, não existe uma cópia dele para cada membro da hierarquia de classes. Um Javanese criado herda o atributo type com o valor igual a “c”, mas quando você seta o valor para “j”, ele sobrescreve o valor. Confira:
Mas ele não sobrescreve só na classe especializada?
Toda vez que uma variável/ método for sobrescrita a variável/ método da superclasse também será?
L
LeandroMartins1 like
Pense nisso como uma herança de verdade. Se você herda um carro do seu pai, só existe um carro. Se você trocou a cor do carro, você trocou a cor do único carro que existe. Se sua subclasse sobrescrever um método da superclasse, você vai sempre chamar o método da subclasse (a menos que você use mecanismos para chamar o método da superclasse, como o super()). Entendeu?
J
Jrmanzini
Entendi, obrigado!
J
Jonas_B_a_r_r_o_s1 like
Se a variavel for privada não. Por isso a importancia dos gets e sets