O que é Upcasting e Downcasting em Java? Explicação simples

Publicados: 2021-01-22

Índice

Upcasting e Downcasting em Java

Typecasting em Java refere-se ao procedimento que envolve a conversão de um tipo de dado para outro. Isso pode ser feito de forma automática e manual. Enquanto um programador precisa fazer a conversão manual por conta própria, um compilador é usado para o processo automático. Downcasting e upcasting são essencialmente dois tipos de typecasting de objetos.

Objetos filho e pai são dois tipos distintos de objetos. Agora, existem duas maneiras com as quais os objetos podem ser inicializados, posteriormente também herdando as propriedades que as classes filho e pai possuem. Essas maneiras incluem:

  • Child c = new Child(): acessa todos os membros das classes filha e pai
  • Parent p = new Child(): Acessa apenas os membros da classe pai, bem como os métodos que foram substituídos na classe filha

Essencialmente, a conversão do tipo Pai para Filho é conhecida como Upcasting, enquanto a conversão do tipo Criança para Pai é chamada de Downcasting.

O sistema typecasting é usado para garantir que as variáveis ​​sejam processadas por uma função com precisão ou não. Embora o downcasting não seja possível implicitamente, pode-se realizar o upcasting explicitamente e implicitamente.

Tanto o downcasting quanto o upcasting são elementos importantes do Java e permitem que as pessoas desenvolvam programas complexos com o uso de sintaxe simples. Eles também têm algumas grandes vantagens, como agrupar diversos objetos ou polimorfismo.

Aprenda cursos de desenvolvimento de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Transmissão

No upcasting, um objeto filho é um typecast para um objeto de classe pai. Com o uso desse processo, as pessoas podem acessar os métodos e variáveis ​​distintos da classe pai para a classe filho com facilidade. O acesso a apenas alguns dos métodos e variáveis ​​específicos da classe filha, como os métodos substituídos, é necessário no processo. Em muitos casos, o upcasting também é chamado de ampliação e generalização. O upcasting pode ser realizado implicitamente e fornece às pessoas a flexibilidade de acessar os membros da classe pai.

O exemplo a seguir pode ajudar a fornecer uma melhor compreensão do processo.

Exemplo: Existe uma classe de animais que apresenta diversas classes de animais, sendo os peixes uma delas. Agora, supondo que a classe animal seja estendida pela classe fish, haveria duas formas de herança. A herança é um dos principais aspectos da Programação Orientada a Objetos ou POO, que permite que uma classe herde os recursos de outra. Isso implica a classe derivada que é um superconjunto da classe base. Pode haver mais métodos apresentados aqui do que a classe base. Durante o upcast, a única coisa que pode acontecer com a interface de classe é que ela pode acabar perdendo métodos em vez de ganhá-los. Como resultado disso, o compilador permite upcasting sem nenhum tipo de notação especial ou conversões explícitas.

Composição x Herança

Quando se trata de programação orientada a objetos, há uma grande chance de que alguém acabe criando e usando feito apenas empacotando métodos e dados juntos em uma classe, enquanto posteriormente faz uso dos objetos presentes nessa classe. As pessoas podem até usar certas classes existentes para desenvolver novas classes com composição. A herança é usada comparativamente raramente. Ao aprender OPP, embora a herança tenha muito foco, é importante que os desenvolvedores saibam seu uso correto e não tentem usá-lo simplesmente onde puderem.

Na verdade, deve-se usá-lo muito raramente, apenas para os cenários em que a herança é realmente útil. Uma das maneiras mais simples de identificar se uma pessoa deve usar herança ou composição é se questionar se ela precisa fazer o upcast de seu novo elenco para o elenco base. Caso o upcasting seja uma necessidade, seria necessário usar a herança. No entanto, se não for um requisito, deve-se insistir na necessidade de herança.

Downcasting

O downcasting é outra forma de conversão de tipo de objeto e é usado para nomear o objeto de referência de subclasse para a classe pai que não é permitido em Java. Downcast não é muito difícil de entender. Por exemplo, se houver uma classe base e uma classe que deriva indiretamente ou indiretamente da classe base, sempre que um objeto do tipo de classe base for convertido em uma classe derivada, ele será chamado de downcast. Conseqüentemente, de acordo com o downcasting, desceríamos o diagrama de herança tentando pegar um objeto de classe base e então convertê-lo em um tipo de classe derivada. No entanto, é importante observar que, com base no código que está sendo escrito, o downcasting pode ou não fazer sentido.

À medida que as pessoas executam o sistema de downcasting, elas não encontrarão nenhum tipo de erro do compilador. No entanto, eles enfrentariam java.lang.ClassCastException, que é uma exceção de tempo de execução. Então agora surge a questão se o downcasting não é possível em Java, então por que as pessoas o executam? Simplificando, o downcasting pode ser usado apenas em situações particulares em que o objeto referido pela classe pai pertence a uma subclasse.

O downcasting pode ser extremamente útil ao comparar um objeto com outro.

Para verificar se um downcasting é válido ou não, pode-se executar

O sistema getClass() permite que os desenvolvedores entendam a classe do objeto que está sendo passado e, posteriormente, comparem-no com a classe atual. Caso não sejam iguais, o downcasting não será válido e experimentar esse processo será inútil. O conceito de downcasting usa principalmente a conversão de supertipos para os subtipos. Esse processo de casting geralmente é feito de maneira explícita. Isso basicamente implica que tipos de tamanho maior são feitos para caber explicitamente em tipos de tamanho pequeno.

Upcasting vs Downcasting

Upcasting e. O downcasting tem algumas diferenças muito particulares. Alguns deles foram brevemente sublinhados nas seguintes indicações:

  • Em Upcasting, um objeto filho é tipificado para um objeto pai. Por outro lado, a referência do objeto da classe pai acaba sendo repassada para a classe filha quando se trata de downcasting.
  • As pessoas podem realizar o upcasting explicitamente e implicitamente, enquanto o downcasting só pode ser realizado explicitamente.
  • No caso de upcasting, as pessoas podem acessar as variáveis ​​e métodos da classe pai na classe filha, mas não o contrário. No downcasting, no entanto, as variáveis ​​e métodos de ambas as classes são facilmente acessíveis.
  • O upcasting permite acesso apenas a métodos de classe filho específicos. Tanto ao realizar downcasting, todos os métodos e variáveis ​​de ambas as classes são disponibilizados.

Conclusão

O upcasting é usado raramente em Java. Na maioria dos casos, as pessoas o usam quando precisam desenvolver um código que lida apenas com a classe pai. Quando se trata de desenvolver um código que fornece acesso ao comportamento da classe filha, o downcasting tende a ser usado.

Se você quer aprender Java e também obter uma certificação em computação em nuvem, upGrad oferece um Programa de Certificação Avançado em Computação em Nuvem . O curso on-line de 7,5 meses foi projetado especificamente para profissionais que trabalham para ajudá-los a ingressar nas funções de computação em nuvem.

Torne-se um Desenvolvedor Full Stack

INSCREVA-SE AGORA PARA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO DE LIVERPOOL JOHN MOORES