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) ?
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
marcobiscaro2112
Imagine só:
Snowboards=newSnowboard();SeiLaOQuea=newSeiLaOQue();Objecto=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álidoo.metodoDeSeiLaOQue();// inválido pelo mesmo motivo citado acima
Existe a técnica de cast. Veja um exemplo:
Objecto=ClasseQualquer.metodoQueRetornaUmSnowboard();Snowboards=(Snowboard)o;// válido// isso permite acessar os métodos específicos de Snowboard
Sacou a idéia?
A
Ademir_Franco
marcobiscaro2112:
Imagine só:
Snowboards=newSnowboard();SeiLaOQuea=newSeiLaOQue();Objecto=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álidoo.metodoDeSeiLaOQue();// inválido pelo mesmo motivo citado acima
Existe a técnica de cast. Veja um exemplo:
Objecto=ClasseQualquer.metodoQueRetornaUmSnowboard();Snowboards=(Snowboard)o;// válido// isso permite acessar os métodos específicos de Snowboard