[SOLUCIONADO][JAVA] Duda con código

Iniciado por $francisco, Agosto 04, 2014, 05:15:11 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 04, 2014, 05:15:11 AM Ultima modificación: Noviembre 01, 2014, 06:54:09 AM por blackdrake
Buenos días o noches  :) me compré un librito para empezar a ver java, y ya estoy empezando a tener algunas dudas que el libro no explica.

Código: java
package prulibro;
import java.util.Scanner;

public class Prulibro {
    public static class Fecha
{
    int dia = 1;
    int mes = 10;
    int ano = 14;
    public boolean equals(Object o)
    {
        System.out.println(o);
        return (1==1);//Esto es una chapuza que hice al cambiar el código
    }
}
   
        public static class Seg
{
    int dia = 3;
    int mes = 10;
    int ano = 14;
    public boolean equals(Object o)
    {
        Fecha otra = (Fecha)o;//ESTO ES NO SE QUE ES LO QUE SIGNIFICA
        System.out.println(otra.dia);
        return (1==1);
    }
}
    public static void main(String[] args) {
        // TODO code application logic here
        Seg  otr = new Seg();
        Fecha f = new Fecha();
        f.equals(otr);
       
    }
   
}


Bueno la linea que me gustaría que me explicaran es
Código: php
Fecha otra = (Fecha)o;


La linea no me da Error pero no entiendo que tiene que ver "Fecha" con la clase que le paso ni porque después de el "=" dentro de el paréntesis va "Fecha" y después el objeto "o".

gracias por vuestra atención.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Buenos días o noches  :) me compré un librito para empezar a ver java, y ya estoy empezando a tener algunas dudas que el libro no explica.

Código: php
package prulibro;
import java.util.Scanner;

public class Prulibro {
    public static class Fecha
{
    int dia = 1;
    int mes = 10;
    int ano = 14;
    public boolean equals(Object o)
    {
        System.out.println(o);
        return (1==1);//Esto es una chapuza que hice al cambiar el código
    }
}
   
        public static class Seg
{
    int dia = 3;
    int mes = 10;
    int ano = 14;
    public boolean equals(Object o)
    {
        Fecha otra = (Fecha)o;//ESTO ES NO SE QUE ES LO QUE SIGNIFICA
        System.out.println(otra.dia);
        return (1==1);
    }
}
    public static void main(String[] args) {
        // TODO code application logic here
        Seg  otr = new Seg();
        Fecha f = new Fecha();
        f.equals(otr);
       
    }
   
}


Bueno la linea que me gustaría que me explicaran es
Código: php
Fecha otra = (Fecha)o;


La linea no me da Error pero no entiendo que tiene que ver "Fecha" con la clase que le paso ni porque después de el "=" dentro de el paréntesis va "Fecha" y después el objeto "o".

gracias por vuestra atención.

Lo que hace es convertir el tipo object a tipo fecha.

Te pongo un ejemplo

Si quieres convertir un tipo decimal a entero, una forma de hacerlo sería :

float x = 2.3;
int y = 0;

y = (int) x;

System.out... // el resultado de y sería 2



Según recuerdo a esta técnica se le llama casting

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


Gracias por responder, tu ejemplo si lo entiendo pero lo que no se es porque se pone "Fecha" antes de la variable por ejemplo.

Código: php
y = (int)x;


"y" es donde se va a guardar la conversión de float a int pero

Código: php
Fecha otra = (Fecha)o;


¿porque se pone "Fecha" antes de "otra"?

Agosto 04, 2014, 02:54:21 PM #3 Ultima modificación: Agosto 04, 2014, 03:04:14 PM por Devilboy
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Gracias por responder, tu ejemplo si lo entiendo pero lo que no se es porque se pone "Fecha" antes de la variable por ejemplo.

Código: php
y = (int)x;


"y" es donde se va a guardar la conversión de float a int pero

Código: php
Fecha otra = (Fecha)o;


¿porque se pone "Fecha" antes de "otra"?

ok primero ten MUY en cuenta esto:

"¡¡¡TODAS LAS CLASES YA ESCRITAS EN JAVA Y LAS QUE TU ESCRIBAS VAN A DERIVAR DE OBJECT!!!"


ahora en tu ejemplo tienes la sig función:

Código: php
public boolean equals(Object o)
    {
        Fecha otra = (Fecha)o;//ESTO ES NO SE QUE ES LO QUE SIGNIFICA
        System.out.println(otra.dia);
        return (1==1);
    }


donde equals espera un tipo OBJECT

esto quiere decir que tu le puedes pasar como parametro CUALQUIER COSA

osea que le puedes pasar un parametro de tipo Empleado, Avión, DE LO QUE TU QUIERAS.

por lo tanto si creas una variable de tipo Fecha pero en tu parametro le pasas un tipo Avión, pues no va a funcionar.

es por esto que se hacela conversion explicita

Fecha otra = (Fecha)o;

otro ejemplo sería convertir el tipo Avion en tipo Fecha:

Fecha otra = (Fecha)avion

me explico???


Piensa en la sig. analogía:

Tienes una caja de cartón donde UNICAMENTE puedes meter fechas.
Tienes otra caja de cartón donde UNICAMENTE puedes meter aviones.

por lo tanto si tomas una caja con un avión no la vas a poder meter en la caja llamada fecha

PERO...
si metes la caja con el avión en un caja mas grande llamada fecha, esta si la vas a poder meter en la caja con fechas no crees?

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


¿Eso quiere decir que cuando se pasa a un método de una clase un objeto, para poder manejar el objeto tiene que ser de el mismo tipo que en el que está dentro?

¿esto no sería valido?
Código: php
System.out.println(o.dia);


Perdona jeje pero es que vengo de python y me es totalmente distinto todo esto.

Agosto 04, 2014, 04:20:57 PM #5 Ultima modificación: Agosto 04, 2014, 04:24:18 PM por Devilboy
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
¿Eso quiere decir que cuando se pasa a un método de una clase un objeto, para poder manejar el objeto tiene que ser de el mismo tipo que en el que está dentro?

¿esto no sería valido?
Código: php
System.out.println(o.dia);


Perdona jeje pero es que vengo de python y me es totalmente distinto todo esto.



no sería valido ya que "dia" es unicamente algun atributo o metodo de la clase fecha.

tendrías que convertirla primero:


System.out.println((fecha)o.dia)


o posiblemente sea valido ya que hay tipos de datos que "caben" dentro de otros tipos

pero SIEMPRE  acostumbrate a que si trabajas con manzanas, conviertas primero las naranjas en manzanas

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


Entonces estoy un poco confundido, pero si a caso, no se si te distes cuenta que cuando le pasa como parámetro la clase "seg" a través de la variable "otr", la clase seg tiene también un atributo llamado "dia". ¿Aunque lo tenga, no seria accesible?

Veamos, en el código
Fecha Variable1 = (Fecha)Variable2
El primer fecha, lo que hace es decir que la primera variable (Variable1), es del tipo Fecha (Es decir, que tiene determinadas características). Luego, en
(Fecha)Variable2, lo que hace es 'parsear' el objeto dado (Variable2), para que pueda entrar (Como te dijo devil), en la Variable1 (Que declaramos como  tipo Fecha). (Corrigeme Devil si es necesario, he programado poco en Java).
Visita mi blog: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.