Imprimir
Categoría: Java
Visto: 10066

En PC Resumen hablaremos de como pasar objetos como parámetros en Java.

Hasta el momento sólo hemos utilizado tipos simples como parámetros de los métodos pero es común y perfectamente correcto, pasar objetos a los métodos.

Uno de los usos más comunes de los parámetros de objetos implica a los constructores. Muy a menudo, se quiere construir un nuevo objeto de forma que sea igual a otro objeto ya existente. Para hacerlo, se debe definir un constructor que tome un objeto de su clase como parámetro. Por ejemplo, la siguiente versión de Caja permite que un objeto inicialice a otro:

class Caja {
    double anchura;
    double altura;
    double profundidad;
 
    // Se construye una copia idéntica del objeto

    Caja(Caja ob) {  // Pasamos un objeto al constructor
        anchura = ob.amplada;
        altura = ob.alçada;
        profundidad = ob.profunditat;
    }

    // Constructor que se utiliza cuando se especifican todas las dimensiones
    
    Caja(double w, double h, double d) {
        anchura = w;
        altura = h;
        profundidad = d;
    }

    // Constructor que se utiliza cuando no se especifican dimensiones

    Caja() {
        anchura = -1; // Usar -1 para indicar
        altura = -1; // una caja
        profundidad = -1; // no inicializada.
    }

    // Constructor que se utiliza cuando se crea un cubo

    Caja(double len) {
        anchura = altura = profundidad = len;
    }

    // Cálculo y regreso del volumen.

    double volumen() {
        return ancho * altura * profundidad;
    }
}

class OverloadCons {
    public static void main (String args []) {

        // Se crean diferentes cajas

        Caja cajaMia1 = new Caja(10, 20, 15);
        Caja cajaMia2 = new Caja();
        Caja cubo = new Caja(7);
        Caja clon = new Caja(cajaMia1);
    
        ......................
    }
}

Paso de argumentos

En Java cuando se pasa un tipo simple a un método, se pasa por valor. Por tanto, lo que le pueda pasar al parámetro que recibe el argumento, no tiene efecto fuera del método.

Cuando se pasa un objeto a un método, la situación cambia para que los objetos se pasan por referencia. Debemos tener en cuenta que cuando se crea una variable del tipo de clase, lo que se está creando únicamente es una referencia a un objeto. Por lo tanto, cuando se pasa esta referencia a un método, el parámetro que lo recibe hará referencia al mismo objeto al que se refiere el argumento. Los cambios en el objeto dentro del método afectarán al objeto utilizado como argumento.

Retorno de objetos

Un método puede devolver cualquier tipo de datos, incluyendo los tipos de clase creados por el programador. Por ejemplo en el siguiente programa, el método incrDeu() devuelve un objeto en el que el valor a es diez veces mayor que en el objeto que llama al método:

class Test {
    int a;
    
    Test(int i) {
        a = i;
    }

    Test incrDeu() {
        Test temp = new Test(a+10);
        return temp;
    }
}

class RetOb {
    public static void main(String args[]) {
        Test OB1 = new Test(2);
        Test OB2;
        OB2 = ob1.incrDeu();
        System.out.println( "ob1.a:" + ob1.a);
        System.out.println( "ob2.a:" + ob2.a);
        OB2 = ob2.incrDeu();
        System.out.println( "ob2.a después del segundo incremento: " + ob2.a);
    }
}

Cada vez que se llama a incrDeu(), se crea un nuevo objeto y una referencia de este objeto se devuelve a la rutina que hace la llamada.

El programa anterior muestra otro punto interesante. Dado que todos los objetos se crean dinámicamente utilizando el operador new, no hay que preocuparse de si un objeto desaparece cuando finaliza el método en el que fue creado. El objeto continuará existiendo siempre y cuando en algún lugar del programa exista una referencia a él. Cuando ya no haya referencias este será eliminado.