O que é Casting
Ola pessoal estou estudando java pelo livro Caleum que encontrei na net e chegou em uma parte que esplicava sobre casting gostaria de saber todas as formas de utilizar este artificiu com todos os tipos de variaveis
David Toreli
Curtidas 1
Melhor post
David Toreli
26/10/2011
[quote="David Toreli"]Ola pessoal estou estudando java pelo livro Caleum que encontrei na net e chegou em uma parte que esplicava sobre casting gostaria de saber todas as formas de utilizar este artificiu com todos os tipos de variaveis
Todas as formas de utilizar cast?
Na verdade só existe uma:
TipoEspecifico variavelEspecifica= (TipoEspecifico) variavelGenerica;
A
|
+--+--+
| |
B_1 B_2
| |
C_1 C_2
|
D_1
// declarar e inicializar uma variavel de cada tipo A a = new A(); B_1 b1 = new B_1(); B_2 b2 = new B_2(); C_1 c1 = new C_1(); C_2 c2 = new C_2(); D_1 d1 = new D_1();
// criar variaveis do tipo A e referenciar objetos ja existentes A a1 = a; // perfeitamente valido, afinal o objeto "a" é do tipo A, então pode ser referenciado pela a variavel "a2" A a2 = b1; // também é valido pois todo objeto do tipo B_1, é uma extensão do tipo A A a3 = b2; // idem A a4 = c1; // idem A a5 = c2; // idem A a6 = d1; // idem
// criar variaveis do tipo B_1 e referenciar objetos ja existentes B_1 b3 = b1; // perfeitamente valido, afinal o objeto "b1" é do tipo B_1, então pode ser referenciado pela a variavel "b3" B_1 b4 = c1; // todo objeto do tipo "C_1" é também um objeto do tipo "B_1" B_1 b5 = d1; // idem
// criar variavel do tipo C_1 e referenciar objeto ja existente C_1 c2 = c1; // perfeitamente valido, afinal o objeto "c1" é do tipo C_1, então pode ser referenciado pela a variavel "c2"
// declarar uma variavel do tipo mais generico: o tipo A A variavelGenerica; // inicializar essa variavel com o tipo C_1 variavelGenerica= new C_1();
// declarar uma variavel do tipo mais generico: o tipo A A variavelGenerica; // inicializar essa variavel com o tipo C_1 variavelGenerica= new C_1(); // invocar o metodo "fazAlgo" variavelGenerica.fazAlgo(); // vai dar erro de compilação, pois a variavel é do tipo A e na classe A nao existe o metodo "fazAlgo"
// declarar uma variavel do tipo mais generico: o tipo A A variavelGenerica; // inicializar essa variavel com o tipo C_1 variavelGenerica= new C_1(); // declarar uma variavel especifica C_1 variavelC1; // inicializar a variavel especifica com o objeto do tipo generico variavelC1 = variavelGenerica; // Opa, continua dando erro de compilação, afinal, o compilador nao tem como adivinhar que a variavel do tipo A tem uma referencia ao tipo C_1
// declarar uma variavel do tipo mais generico: o tipo A A variavelGenerica; // inicializar essa variavel com o tipo C_1 variavelGenerica= new C_1(); // declarar uma variavel especifica C_1 variavelC1; // inicializar a variavel especifica com o objeto do tipo generico /* * O cast, nada mais é, do que colocar entre parenteses o tipo de dado especifico * que sabemos que esta sendo referenciado pela variavel de tipo generico */ variavelC1 = (C_1) variavelGenerica; // Agora sim, estamos dizendo pro compilador que a variavel do tipo A tem uma referencia a um objeto do tipo C_1 // finalmente podemos invocar o metodo especifico da classe C_1 variavelC1.fazAlgo();
GOSTEI 3
Mais Respostas
Douglas Eric
26/10/2011
por acaso você comprou o tal livro?
copiar livros da internet é crime.
GOSTEI 0
David Toreli
26/10/2011
[quote="sekkuar"]por acaso você comprou o tal livro?
copiar livros da internet é crime.
ei kara não sei se foi crime pois baixei deste forum aqui chamado eba se foi peço desculpa mais sinceramente não sabia disso
mais respondam a minha pergunta por favor da uma forcinha ai
site onde foi baixado o livro
http://www.ebah.com.br/content/ABAAAAMqAAB/java-oo
GOSTEI 0
David Toreli
26/10/2011
eu conheço mais uma, apesar de parecida:
cast de primitivos! Alguns exemplos:
___________________________________________
A JLS (Java Language Specification) menciona várias "Casting Conversion": 5.5 [url="http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.5"][u]Casting Conversion[/u][/url]
[[]]
float f = 1.23f;
double d = 4.56;
long l = 34;
int i;
char ch;
f = (float) d;
l = (long) d;
l = (long) f;
i = (int) d;
i = (int) f;
i = (int) l;
ch = (char) i;
GOSTEI 0
João Sewaybrick
26/10/2011
Além dos castings feito pelo colega acima.
há caso em que esse cast (conversão) é feito de forma automática.
Isso ocorre sempre do menor valor para o maior.
quanto mair o tipo primitivo , menor a chance do cast automático.
Seria como despejar um balde de água em um copo, haveria um derramamento. (por isso da necessidade do programador fazer o cast, seria como se ele disse-se que está ciente desse derramamento para o compilador, que irá parar de chiar);
conversões implicitas:
byte ->short->int->long->float->double
explicitas
double ->float->long ->int->short ->byte
char pode ser convertido em um int, long, float ou double
também tem as classes wrappers que são empacotadores dos tipos primitivos.
Que também utilizam conversão
GOSTEI 0
Douglas Eric
26/10/2011
[quote="DragonForce6544"]Além dos castings feito pelo colega acima.
há caso em que esse cast (conversão) é feito de forma automática.
Isso ocorre sempre do menor valor para o maior.
quanto mair o tipo primitivo , menor a chance do cast automático.
Seria como despejar um balde de água em um copo, haveria um derramamento. (por isso da necessidade do programador fazer o cast, seria como se ele disse-se que está ciente desse derramamento para o compilador, que irá parar de chiar);
conversões implicitas:
byte ->short->int->long->float->double
explicitas
double ->float->long ->int->short ->byte
char pode ser convertido em um int, long, float ou double
também tem as classes wrappers que são empacotadores dos tipos primitivos.
Que também utilizam conversão
Isso não pode ser considerado um cast... pode?
cast é justamente você forçar o valor a ser do tipo mais/menos específico
GOSTEI 0
Douglas Eric
26/10/2011
[quote="simu"]
...
A JLS (Java Language Specification) menciona várias "Casting Conversion": 5.5 [url="http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.5"][u]Casting Conversion[/u][/url]
GOSTEI 0
Ricardo Staroski
26/10/2011
[quote="sekkuar"]cast é justamente você forçar o valor a ser do tipo mais/menos específico
Complementando.
[b]up cast:[/b] variavel de tipo menos especifico recebe valor/referencia da variavel de tipo mais especifico.
[i]É realizado implicitamente, ou seja, não precisa colocar o tipo menos especifico entre parenteses[/i]
[b]down cast:[/b] variavel de tipo mais especifico recebe valor/referencia da variavel de tipo menos especifico.
[i]Precisa ser realizado explicitamente, ou seja, precisa colocar o tipo menos especifico entre parenteses[/i]
Lembrando que com o down cast de objetos, não se perde nada pois a variavel sempre recebe uma referencia.
Agora com o down cast de tipos primitivos, quando a variavel mais especifica contiver um valor maior que a magnitude da variavel menos especifica, esse valor será truncado.
GOSTEI 0
Douglas Eric
26/10/2011
Conversão...
GOSTEI 0
João Sewaybrick
26/10/2011
Como citado também por outros colegas, pode sim.
cast implicito.
A idéia de colocar o cast() forçado é simplesmente avisar que vc esta ciente que haverá um derramamento, ou seja esta ciente que vai perder dados.
Uma coisa interessante a ser citado é o fato de haver derramamento mesmo quando vc tem certeza que um determinado número cabe em outro tipo.
ex: digamos que temos 1 inteiro e atribuimos esse 1 a um byte , haverá derramamento.
Mesmo o byte podendo ter um número entre -128 a 127?
Sim, porque um int usa 4byte ou seja 00000000.00000000.00000000.00000001 e mesmo que esse número represente 1 quando vc converte para byte estará perdendo 3 octetos e para o compilador isso seria um derramamento.
GOSTEI 0