Duvida sobre construtor

14 respostas
M

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!!!

14 Respostas

S

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 :grin:

H

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

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

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; }
}
public class Teste {

  public static void main(String args[]) {
    bogo(new Extension());
  }

  static void bogo(Base b) {
    b.add(8);
    b.print();
  }
}
[/b]
F

seria 13 :?:

F

:oops: nao …

F

:oops: nao …

n, mas obrigado por n compilar, heheheh, explique pq achas q seria 13!

F

: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

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

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

o resultado seria 12?

F

:lol: n, o resultado n é 12 malanquini :roll:

F

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

“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 …

Queria ter um filho assim :lol: CERTISSIMO

Criado 27 de março de 2005
Ultima resposta 1 de abr. de 2005
Respostas 14
Participantes 6