GARANTIR DESCONTO

Fórum Casting, Não entendi. #525063

07/07/2015

0

Para falar a verdade entendi mais menos o conceito mas na prática não enxerguei algo alem, resumindo, o cast é uma conversão de dados?
Felipe Moreira

Felipe Moreira

Responder

Posts

07/07/2015

Ronaldo Lanhellas

Para falar a verdade entendi mais menos o conceito mas na prática não enxerguei algo alem, resumindo, o cast é uma conversão de dados?


O cast é uma conversão de tipos, sendo mais específico. Vou lhe dar um exemplo prático talvez melhore seu entendimento:

Suponha que você tenha uma classe PessoaFisica que estende da classe Pessoa, pois toda Pessoa é uma Pessoa Física, certo ?

Você tem um método que só aceita como parâmetro objetos do tipo Pessoa, mas você tem apenas PessoaFisica, e agora ? Bom, se toda PessoaFisica é uma PEssoa, então logicamente você poderá fazer o "cast/conversão" de uma PessoaFisica para Pessoa, assim:

PessoaFisica pessoaFisica = getPessoaFisica(); 

//Faz o cast para Pessoa
Pessoa pessoaFromCast = (Pessoa) pessoaFisica;
metodoQueSoRecebePessoa(pessoaFromCast);

public void metodoQueSoRecebePessoa(Pessoa pessoa){}
Responder

Gostei + 0

07/07/2015

Ronaldo Lanhellas

Para falar a verdade entendi mais menos o conceito mas na prática não enxerguei algo alem, resumindo, o cast é uma conversão de dados?


O cast é uma conversão de tipos, sendo mais específico. Vou lhe dar um exemplo prático talvez melhore seu entendimento:

Suponha que você tenha uma classe PessoaFisica que estende da classe Pessoa, pois toda Pessoa é uma Pessoa Física, certo ?

Você tem um método que só aceita como parâmetro objetos do tipo Pessoa, mas você tem apenas PessoaFisica, e agora ? Bom, se toda PessoaFisica é uma PEssoa, então logicamente você poderá fazer o "cast/conversão" de uma PessoaFisica para Pessoa, assim:

PessoaFisica pessoaFisica = getPessoaFisica(); 

//Faz o cast para Pessoa
Pessoa pessoaFromCast = (Pessoa) pessoaFisica;
metodoQueSoRecebePessoa(pessoaFromCast);

public void metodoQueSoRecebePessoa(Pessoa pessoa){}
Responder

Gostei + 0

07/07/2015

Ronaldo Lanhellas

Para falar a verdade entendi mais menos o conceito mas na prática não enxerguei algo alem, resumindo, o cast é uma conversão de dados?


O cast é uma conversão de tipos, sendo mais específico. Vou lhe dar um exemplo prático talvez melhore seu entendimento:

Suponha que você tenha uma classe PessoaFisica que estende da classe Pessoa, pois toda Pessoa é uma Pessoa Física, certo ?

Você tem um método que só aceita como parâmetro objetos do tipo Pessoa, mas você tem apenas PessoaFisica, e agora ? Bom, se toda PessoaFisica é uma PEssoa, então logicamente você poderá fazer o "cast/conversão" de uma PessoaFisica para Pessoa, assim:

PessoaFisica pessoaFisica = getPessoaFisica(); 

//Faz o cast para Pessoa
Pessoa pessoaFromCast = (Pessoa) pessoaFisica;
metodoQueSoRecebePessoa(pessoaFromCast);

public void metodoQueSoRecebePessoa(Pessoa pessoa){}
Responder

Gostei + 0

07/07/2015

Felipe Moreira

No seu exemplo(código) a pessoa está sendo "convertida" para pessoa fisica, correto?
Responder

Gostei + 0

07/07/2015

Ronaldo Lanhellas

Ao contrário, a PessoaFisica está sendo convertida para Pessoa. Nem toda Pessoa é uma PessoaFisica (pode ser PessoaJuridica), mas toda PessoaFisica é uma Pessoa.
Responder

Gostei + 0

07/07/2015

Ronaldo Lanhellas

Ao contrário, a PessoaFisica está sendo convertida para Pessoa. Nem toda Pessoa é uma PessoaFisica (pode ser PessoaJuridica), mas toda PessoaFisica é uma Pessoa.
Responder

Gostei + 0

07/07/2015

Thiago Moises

Somente complementando com um exemplo mais simples:

        int numeroInteiro;
        double numeroDecimal = 10.5;
        
        numeroInteiro = (int) numeroDecimal;
        
        System.out.println(numeroInteiro);


O numero tipo double é convertido para um numero tipo inteiro.

Resumindo, o Cast faz a conversão do tipo, no caso acima converteu de double para int.
Responder

Gostei + 0

07/07/2015

Felipe Moreira

Ao contrário, a PessoaFisica está sendo convertida para Pessoa. Nem toda Pessoa é uma PessoaFisica (pode ser PessoaJuridica), mas toda PessoaFisica é uma Pessoa.


Viajei, mas é que não entendi bem o código!
Responder

Gostei + 0

07/07/2015

Felipe Moreira

Thiago, boa noite!

Entendi um pouco melhor seu exemplo! Agora me tira uma duvida, a conversão "tradicional" em Java é diferente do casting? ou casting é a nova formula de conversão?

[url]https://www.devmedia.com.br/conversoes-de-tipos/4693[/url]
Responder

Gostei + 0

08/07/2015

Thiago Moises

Boa noite cara.. Tudo certo?
Desculpa a demora pra responder :)
Pelo que vi tu é iniciante em programação então vou tentar explicar sem ir tão a fundo.

Dependendo da forma em que você vai aplicar a conversão, as duas formas estarão corretas e servirão do mesmo jeito.
Porem existem algumas diferenças entre elas.
O Cast é utilizado para sair de um tipo e ir para um tipo mais especifico.Ex:

double n1 = 3.5;
int n2 = (int) n1;
//n2 valerá 3


No exemplo acima estamos saindo de uma variável numérica com casas decimais e estamos indo para um tipo numérico mais especifico (inteiro) ignorando aa casa decimais e fazendo apenas o valor "cheio".
Caso fosse feito o contrario e saindo de um inteiro e indo para um Double estaria errado e daria erro. Ex

int n1 = 3;
double n2 = (double) n1;
//isso esta errado e causará erro


Sendo assim não é possível fazer Cast ente tipos numéricos para String (ou vice versa), nem boolean para string etc.

Ja a conversão usando os métodos PARSE realmente convertem os conteúdos das variáveis(com algumas poucas restrições). Ex:

double n1 = Double.parseDouble("1.2");
//n1 valerá 1.2
double n2 = Double.parseDouble(1);
//n2 valerá 1.0000
String s = String.valueof(true);
//s valerá"true


Algumas restrições no uso do PARSE:

-boolean nao pode ser convertido para tipos numéricos, nem vice-versa.
-null nao pode ser convertido para tipos numéricos.

Meu conselho: Como esta iniciando e logica agora, use apenas os métodos parse. Evite usar Cast. Cast será útil quando você começar utilizar os conceitos de herança, como o polimorfismo. Por enquanto deixe o Cast quieto. Ele seta muito útil a você.. Mas não agora :)

Ps: Caso os exemplos tenham algum erro de sintaxe me perdoe. Digitei tudo pelo. celular kkkk

Off: Caso tiver interesse manda seu skype pra mim no meu e-mail. Ficarei feliz em esclarecer sua dúvidas.
Meu email: codnplay@gmail.com

Abraços.. Ate mais :)
Responder

Gostei + 0

08/07/2015

Felipe Moreira

Eu pensando que o CAST fosse a forma atual de fazer conversão, valeu mesmo Thiago!!!
Responder

Gostei + 0

08/07/2015

Thiago Moises

Fico feliz em ajudar :)
Mais uma vez, qualquer coisa me mande um email.
Já estive no seu lugar antes e sei como aprender Java sozinho é uma tarefa um pouco penosa. 80% do que aprendi foi sozinho.

Da uma olhada nessa apostila http://www.caelum.com.br/apostila-java-orientacao-objetos/
E ótima e tem todo conteúdo inicial que vai precisar pra começar a programar utilizando Java.

Flw Abraços
Responder

Gostei + 0

08/07/2015

Ronaldo Lanhellas

Boa noite cara.. Tudo certo?
Desculpa a demora pra responder :)
Pelo que vi tu é iniciante em programação então vou tentar explicar sem ir tão a fundo.

Dependendo da forma em que você vai aplicar a conversão, as duas formas estarão corretas e servirão do mesmo jeito.
Porem existem algumas diferenças entre elas.
O Cast é utilizado para sair de um tipo e ir para um tipo mais especifico.Ex:

double n1 = 3.5;
int n2 = (int) n1;
//n2 valerá 3


No exemplo acima estamos saindo de uma variável numérica com casas decimais e estamos indo para um tipo numérico mais especifico (inteiro) ignorando aa casa decimais e fazendo apenas o valor "cheio".
Caso fosse feito o contrario e saindo de um inteiro e indo para um Double estaria errado e daria erro. Ex

int n1 = 3;
double n2 = (double) n1;
//isso esta errado e causará erro


Sendo assim não é possível fazer Cast ente tipos numéricos para String (ou vice versa), nem boolean para string etc.

Ja a conversão usando os métodos PARSE realmente convertem os conteúdos das variáveis(com algumas poucas restrições). Ex:

double n1 = Double.parseDouble("1.2");
//n1 valerá 1.2
double n2 = Double.parseDouble(1);
//n2 valerá 1.0000
String s = String.valueof(true);
//s valerá"true


Algumas restrições no uso do PARSE:

-boolean nao pode ser convertido para tipos numéricos, nem vice-versa.
-null nao pode ser convertido para tipos numéricos.

Meu conselho: Como esta iniciando e logica agora, use apenas os métodos parse. Evite usar Cast. Cast será útil quando você começar utilizar os conceitos de herança, como o polimorfismo. Por enquanto deixe o Cast quieto. Ele seta muito útil a você.. Mas não agora :)

Ps: Caso os exemplos tenham algum erro de sintaxe me perdoe. Digitei tudo pelo. celular kkkk

Off: Caso tiver interesse manda seu skype pra mim no meu e-mail. Ficarei feliz em esclarecer sua dúvidas.
Meu email: codnplay@gmail.com

Abraços.. Ate mais :)


Discordo da sua frase: "O Cast é utilizado para sair de um tipo e ir para um tipo mais especifico."

O cast pode ir de um tipo mais genérico para um mais específico ou vice-versa. O exemplo que dei de Pessoa e PessoaFisica mostra que PessoaFisica (tipo mais específico) pode ir para Pessoa( tipo mais genérico)
Responder

Gostei + 0

08/07/2015

Ronaldo Lanhellas

Boa noite cara.. Tudo certo?
Desculpa a demora pra responder :)
Pelo que vi tu é iniciante em programação então vou tentar explicar sem ir tão a fundo.

Dependendo da forma em que você vai aplicar a conversão, as duas formas estarão corretas e servirão do mesmo jeito.
Porem existem algumas diferenças entre elas.
O Cast é utilizado para sair de um tipo e ir para um tipo mais especifico.Ex:

double n1 = 3.5;
int n2 = (int) n1;
//n2 valerá 3


No exemplo acima estamos saindo de uma variável numérica com casas decimais e estamos indo para um tipo numérico mais especifico (inteiro) ignorando aa casa decimais e fazendo apenas o valor "cheio".
Caso fosse feito o contrario e saindo de um inteiro e indo para um Double estaria errado e daria erro. Ex

int n1 = 3;
double n2 = (double) n1;
//isso esta errado e causará erro


Sendo assim não é possível fazer Cast ente tipos numéricos para String (ou vice versa), nem boolean para string etc.

Ja a conversão usando os métodos PARSE realmente convertem os conteúdos das variáveis(com algumas poucas restrições). Ex:

double n1 = Double.parseDouble("1.2");
//n1 valerá 1.2
double n2 = Double.parseDouble(1);
//n2 valerá 1.0000
String s = String.valueof(true);
//s valerá"true


Algumas restrições no uso do PARSE:

-boolean nao pode ser convertido para tipos numéricos, nem vice-versa.
-null nao pode ser convertido para tipos numéricos.

Meu conselho: Como esta iniciando e logica agora, use apenas os métodos parse. Evite usar Cast. Cast será útil quando você começar utilizar os conceitos de herança, como o polimorfismo. Por enquanto deixe o Cast quieto. Ele seta muito útil a você.. Mas não agora :)

Ps: Caso os exemplos tenham algum erro de sintaxe me perdoe. Digitei tudo pelo. celular kkkk

Off: Caso tiver interesse manda seu skype pra mim no meu e-mail. Ficarei feliz em esclarecer sua dúvidas.
Meu email: codnplay@gmail.com

Abraços.. Ate mais :)


Discordo da sua frase: "O Cast é utilizado para sair de um tipo e ir para um tipo mais especifico."

O cast pode ir de um tipo mais genérico para um mais específico ou vice-versa. O exemplo que dei de Pessoa e PessoaFisica mostra que PessoaFisica (tipo mais específico) pode ir para Pessoa( tipo mais genérico)
Responder

Gostei + 0

08/07/2015

Thiago Moises

Creio que utilizei o termo "específico" de forma errada.
No seu exemplo PessoaFisica é uma classe que herda diretamente as características de Pessoa.
Seguindo esse raciocínio, quando você faz o cast de PessoaFisica para Pessoa você acaba "voltando um nivel" da Herança.
Nesse caso não é necessário fazer o Cast. Pois a Pessoa física já é uma Pessoa.

Vamos supor que:

PessoaFisica>Pessoa>AnimalRacional>Animal

Não preciso fazer o Cast nesses casos.

  PessoaFisica pf = new PessoaFisica;
  Pessoa p = (Pessoa) pf;
  AnimalRacional ar = (AnimalRacional) p;
  Animal a = (Animal) ar;


Porem no contrário deve ser feito o cast.

Porem não queria entrar no mérito sobre herança pois ele está começando agora e nem teve contato nenhum com herança.
Pode gerar confusão para ele.

Espero que ele tenha entendido o conceito. :)
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar