Ajuda + Object

3 respostas
A

Galera seguinte estou estudando Java pelo livro Use a Cabeça Java e me deparo com o seguinte…

“O ponto-chave é que mesmo se o objeto for do tipo Snowboard, uma referência de Object a esse objeto não terá como saber quais os métodos específicos de Snowboard”

Snowboard s = new Snowboard(); Object o = s;

Pq a referência de Object terá apenas os métodos de Object e não de Snowboard (e Object) ?

Valeu

3 Respostas

mateusbrum

Isso se chama polimorfismo.
Cada referência tem um contrato a ser seguido, com isso é possível alterar a implementação em tempo de execução, da mesma maneira que você fez no seu exemplo.
Abraços.

M

Imagine só:

Snowboard s = new Snowboard();
SeiLaOQue a = new SeiLaOQue();

Object o = s;
/* isso é válido pois, necessariamente, um Snowboard é um Object */

o.metodoDeSnowboard();
/* mas isso não pode ser feito, pois nem todo Object é um SnowBoard.
 * Se isso pudesse ser feito, o último comando deveria ser válido também.
 * Isso implicaria numa bagunça danada, já que em diversas partes do programa, o mesmo objeto poderia ter vários métodos diferentes!
 * por isso é usada o casting, que transforma uma instância de uma superclasse
 * em uma instância da subclasse, podendo acessar seus métodos específicos.
 */

o = a; // válido

o.metodoDeSeiLaOQue(); // inválido pelo mesmo motivo citado acima

Existe a técnica de cast. Veja um exemplo:

Object o = ClasseQualquer.metodoQueRetornaUmSnowboard();
Snowboard s = (Snowboard) o; // válido
// isso permite acessar os métodos específicos de Snowboard

Sacou a idéia?

A

marcobiscaro2112:
Imagine só:

Snowboard s = new Snowboard();
SeiLaOQue a = new SeiLaOQue();

Object o = s;
/* isso é válido pois, necessariamente, um Snowboard é um Object */

o.metodoDeSnowboard();
/* mas isso não pode ser feito, pois nem todo Object é um SnowBoard.
 * Se isso pudesse ser feito, o último comando deveria ser válido também.
 * Isso implicaria numa bagunça danada, já que em diversas partes do programa, o mesmo objeto poderia ter vários métodos diferentes!
 * por isso é usada o casting, que transforma uma instância de uma superclasse
 * em uma instância da subclasse, podendo acessar seus métodos específicos.
 */

o = a; // válido

o.metodoDeSeiLaOQue(); // inválido pelo mesmo motivo citado acima

Existe a técnica de cast. Veja um exemplo:

Object o = ClasseQualquer.metodoQueRetornaUmSnowboard();
Snowboard s = (Snowboard) o; // válido
// isso permite acessar os métodos específicos de Snowboard

Sacou a idéia?

Opa entedi sim cara, muito obrigado :smiley:

Criado 27 de dezembro de 2008
Ultima resposta 28 de dez. de 2008
Respostas 3
Participantes 3