Fórum Casting, Não entendi. #525063
07/07/2015
0
Felipe Moreira
Curtir tópico
+ 0Posts
07/07/2015
Ronaldo Lanhellas
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){}
Gostei + 0
07/07/2015
Ronaldo Lanhellas
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){}
Gostei + 0
07/07/2015
Ronaldo Lanhellas
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){}
Gostei + 0
07/07/2015
Felipe Moreira
Gostei + 0
07/07/2015
Ronaldo Lanhellas
Gostei + 0
07/07/2015
Ronaldo Lanhellas
Gostei + 0
07/07/2015
Thiago Moises
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.
Gostei + 0
07/07/2015
Felipe Moreira
Viajei, mas é que não entendi bem o código!
Gostei + 0
07/07/2015
Felipe Moreira
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]
Gostei + 0
08/07/2015
Thiago Moises
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 :)
Gostei + 0
08/07/2015
Felipe Moreira
Gostei + 0
08/07/2015
Thiago Moises
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
Gostei + 0
08/07/2015
Ronaldo Lanhellas
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)
Gostei + 0
08/07/2015
Ronaldo Lanhellas
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)
Gostei + 0
08/07/2015
Thiago Moises
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. :)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)