Como é possível instanciar um objeto do tipo Ave em uma referencia do tipo Animal? Dessa forma só estarão disponíveis os métodos e atributos da superclasse, não?
Em caso positivo, existe algum motivo para se instanciar um objeto de uma subclasse em referência do tipo da superclasse? Porque pelo que me parece não teria nenhuma função faer isso já que de fato o conteúdo da variável será da superclasse e não da subclasse, não é?
[/quote]
Existe diversar funcionalidades… vc pode querer apenas que vc tenha um Animal, o que te importa é apenas que seja um animal, não interessa se é uma ave, um macaco, um bizouro, um cavalo, o que interessa é que seja um animal, senod assim, tanto faz se os métodos especificos não aparecem, pois vc esta focando que ker um animal…
Por exemplo, vc pode ter uma lista, com N animais, essa lista pode conter, aves, sapos, lagartos, etc etc, desde que seja um animal…
isso é uma das grandezas do OO, o polimorfismo, que faz vc aceitar varias formas de animais…
Só por curiosidade: Isso geraria um erro durante a compilação ou execução? Onde estou agora não tenho como testar para ver.
Enfim, obrigado.[/quote]
em tempo de Compilação… pois fica claro para o compilador, que um new Animal(), de forma alguma pode ser uma ave…
porem vc pode ter algo como…
[code]Animal animal = getAnima();
Ave ave = (Ave)animal; //aki vc esta falando para o programa, que seu animal é uma AVE, e vc ker que a transformação seja feita
//porem caso o naimal, não seja na verdade uma Ave, seja apenas um animal, ou um cavalo por exemplo, uma exceção, em tempo de execução será chamada
//ClassCastException[/code]