Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: 16BITBoy en 13 Octubre 2010, 20:10 PM

Título: Función que retorna objetos de "clases" extendidas de una abstracta
Publicado por: 16BITBoy en 13 Octubre 2010, 20:10 PM
Hola amigos.

He estado haciendo uno de los ejercicios que mi profesor me ha mandado y resulta que al plantearme la lógica para resolver el problema, a mi me resulta lógico (no en todos los casos, pero en este si) hacer que una función según un valor que se le pasa o que lo tiene su clase, retorne un objeto de una clase distinta según ese valor. Eso java no lo permite ( y creo que muchos otros tampoco...) No se me ocurre por ahora una manera mas intuitiva para mi(o mejor dicho, personal, a mi estilo, que eso de intuitivo es algo que depende de cada uno :D) de resolver el problema que tengo, el cual si queréis expongo, pero por ahora os pongo el código de prueba, aislado, que muestra exactamente lo que intento.

A ver si se os ocurre algo en esta forma de pensar, que me ayude a solucionar el problema. Según un valor tengo que asignar en una referencia a objeto de clase abstracta un objeto de una clase extendida de esa misma abstracta, pero esta devuelta desde una función.

Código (java) [Seleccionar]

class Leer{
    private int op;
    private OpBinaria obj;
    Leer(int op){
        this.op = op;
        obj = obtObjeto();
    }
    private OpBinaria obtObjeto(){
        if(op == 1){
            Suma suma = new Suma();
            return suma; //Eclipse dice "NopeNope!" Tu dale OpBinaria :D
        }
    }
}

abstract class OpBinaria{
    public int x, y;
    public abstract int op();
}

class Suma extends OpBinaria {
    public int op(){
        return x + y;
    }
}

class Resta extends OpBinaria {
    public int op(){
        return x - y;
    }
}
Título: Re: Función que retorna objetos de "clases" extendidas de una abstracta
Publicado por: Novlucker en 13 Octubre 2010, 20:24 PM
Cada vez que me paso por este foro aclaro lo mismo, no se programar en Java, así que si digo una burrada avisen :xD

Ahí estas devolviendo una instancia de clase de tipo suma, y dado que necesitas devolver una de tipo opBinaria, alcanzaría con que castees :D

Saludos
Título: Re: Función que retorna objetos de "clases" extendidas de una abstracta
Publicado por: [D4N93R] en 13 Octubre 2010, 20:42 PM
Como dice Nov, aunque no es un cast como tal, el termino correcto es Boxing, el cual consiste en "empacar" la referencia en una de sus clases bases, o simplemente en object.

Sería algo así:
Código (java,4) [Seleccionar]

private OpBinaria obtObjeto(){
        if(op == 1){
            Suma suma = new Suma();
            return (OpBinaria )suma;
        }
    }


Un saludo.
Título: Re: Función que retorna objetos de "clases" extendidas de una abstracta
Publicado por: 16BITBoy en 13 Octubre 2010, 20:58 PM
Gracias!. Hay que ver que vengo del C y no ocurrirseme un casting, ("boxing" aquí, buen apunte :) )
Me tragué que no funcionaba también al probarlo por que ahí solo estaba evaluando una de las opciones, osea si op != 1 eso no retorna nada :D Y claro aun con el box/cast pues eclipse me dice que para mi padre si estaría bien :D
Título: Re: Función que retorna objetos de "clases" extendidas de una abstracta
Publicado por: [D4N93R] en 14 Octubre 2010, 01:39 AM
Si, y también se puede hacer lo contrario, es decir, unboxing, que lo que haría en tu caso es sacar la clase Suma de OpBinaria: return (Suma)obj; obviamente siempre tienes que validar si esa referencia contiene boxeado un objeto Suma.

Saludos!