Com esse exemplo do livro da kathy, voltei a ver um trecho de codigo q nao tenho claro o q ocorre:
classHorseextendsAnimal{voidbuck() { }}classAnimal{voideat() { }}classTest{publicstaticvoidmain(String[] args) {Animalh=newHorse(); //minha duvida eh aquih.eat(); // Legal, class Animal has an eat() methodh.buck(); // Not legal! Class Animal doesn?t have buck()}}
quando escrevemos:
Animal h = new Horse()
estamos criando uma instancia de Animal ou de Horse…quem puder explicar esse trecho eu agradeco!!
Cria uma instância de Horse, mas a variável é uma referência pro tipo Animal.
Isso serve para usar o polimorfismo, como você verá adiante
H
hroberPJ
A classe Horse extende a classe Animal, assim ela herda o comportamento da Classe Animal, de uma forma indereta vc têm acesso ao membros da classe Animal. deu para entender ??
F
fmartinsPJ
o objeto criado na memória é um Horse, mas como Animal é PAI ou
SUPERCLASS de Horse você pode atribuir esse objeto Horse a um Animal,
Pensando em objeto, você pode dizer que Horse é um Animal, logo
você pode atribuir essa referencia criada do objeto a um Animal.
Assim, você vai disponibilizar nesse caso somente dos métodos que
Animale possui, que é só eat(), mas você tem a vantagem de quando
chamar eat, ele ser executado da maneira especifica de Horse, isso
caso você tenha sobreescrito/overriden eat().
Tomare q naum tenha complicado :roll:
F
fabiostbPJ
vc ja entendeu marceloedrei?
veja q questão interessante pra vc pensar, por favor resista a tentação de compilar:
Qual o resultado da tentativa de compilar e executar o seguinte programa :?:
classExtensionextendsBase{Extension() { add(2); }voidadd(int v) { i += v*2; }}
public class Teste {
public static void main(String args[]) {
bogo(new Extension());
}
static void bogo(Base b) {
b.add(8);
b.print();
}
}
[/b]
F
fmartinsPJ
seria 13 :?:
F
fmartinsPJ
:oops: nao …
F
fabiostbPJ
:oops: nao …
n, mas obrigado por n compilar, heheheh, explique pq achas q seria 13!
F
fmartinsPJ
:oops: nao …
n, mas obrigado por n compilar, heheheh, explique pq achas q seria 13!
Bem , eu rodei aqui the flash na cabeca .ehehehe … e naum raciocionei direito … é por isso que essas questoes a gente tem q dar uma atencao maior…
na verdade ele sempre vai chamar o metodo add da classe q houve a instancia…
agora se o metodo add fosse estatico a situacao ja mudaria…
F
fabiostbPJ
se na super o add fosse static ele n poderia ser overhidden né? o q faria com q o construtor da super chama-se o add dela mesma (super) e n o da sub, pois nesse caso n haveria poliformismo, certo?
M
marceloedreiPJ
Pessoal,
Obrigado pelas dicas nao respondi nada antes…porq nao recebi os avisos de repostas…chegou um agora pouco…entao pelo q vcs explicaram consegui, espero, entender vou fazer alguns testes pra ver isso na pratica…ate mais!!!
Valeu!!!
M
malanquiniPJ
o resultado seria 12?
F
fabiostbPJ
:lol: n, o resultado n é 12 malanquini :roll:
F
fmartinsPJ
22, a saída
mesmo quando está sendo construído os construtores pais, o método que foi sobreescrito será chamado, no caso o método da classe filha…
se ambos fosse static e a variavel i fosse estatica tb … o metodo que será chamado vai ser o da classe em execucao …
F
fabiostbPJ
“fmartins”:
22, a saída
mesmo quando está sendo construído os construtores pais, o método que foi sobreescrito será chamado, no caso o método da classe filha…
se ambos fosse static e a variavel i fosse estatica tb … o metodo que será chamado vai ser o da classe em execucao …