Pessoal,
Com esse exemplo do livro da kathy, voltei a ver um trecho de codigo q nao tenho claro o q ocorre:
class Horse extends Animal{
void buck() { }
}
class Animal {
void eat() { }
}
class Test {
public static void main (String[] args) {
Animal h = new Horse(); //minha duvida eh aqui
h.eat(); // Legal, class Animal has an eat() method
h.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!!
Valeu!!!
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 
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 ??
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:
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 :?:
class Base {
int i;
Base() { add(1); }
void add(int v) { i += v; }
void print() { System.out.println(i); }
}
class Extension extends Base {
Extension() { add(2); }
void add(int v) { i += v*2; }
}
[code]
public class Teste {
public static void main(String args[]) {
bogo(new Extension());
}
static void bogo(Base b) {
b.add(8);
b.print();
}
}
[/code][/b]
:oops: nao …[/quote]
n, mas obrigado por n compilar, heheheh, explique pq achas q seria 13!
:oops: nao …[/quote]
n, mas obrigado por n compilar, heheheh, explique pq achas q seria 13![/quote]
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…
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?
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!!!
:lol: n, o resultado n é 12 malanquini :roll:
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 …
[quote=“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 …[/quote]
Queria ter um filho assim :lol: CERTISSIMO