in

Sobrecarga de constructores en Java – GeeksforGeeks

gfg 200x200 min

Requisito previo: constructor, sobrecarga en java

Además de sobrecargar métodos, también podemos sobrecargar constructores en java. El constructor sobrecargado se llama en función de los parámetros especificados cuando se ejecuta new.

¿Cuándo necesitamos la sobrecarga de constructores?

A veces es necesario inicializar un objeto de diferentes formas. Esto se puede hacer mediante la sobrecarga del constructor. Por ejemplo, la clase Thread tiene 8 tipos de constructores. Si no queremos especificar nada sobre un hilo, simplemente podemos usar el constructor predeterminado de la clase Thread, sin embargo, si necesitamos especificar el nombre del hilo, entonces podemos llamar al constructor parametrizado de la clase Thread con un argumento String como este:

Thread t= new Thread (" MyThread "); 

Tomemos un ejemplo para comprender la necesidad de sobrecarga de constructores. Considere la siguiente implementación de una clase Box con un solo constructor que toma tres argumentos.

// An example class to understand need of
// constructor overloading.
class Box
{
    double width, height,depth;

    // constructor used when all dimensions
    // specified
    Box(double w, double h, double d)
    {
        width = w;
        height = h;
        depth = d;
    }

    // compute and return volume
    double volume()
    {
        return width * height * depth;
    }
}

Como podemos ver, el constructor Box () requiere tres parámetros. Esto significa que todas las declaraciones de los objetos Box deben pasar tres argumentos al constructor Box (). Por ejemplo, la siguiente declaración no es válida actualmente:

Box ob = new Box();

Dado que Box () requiere tres argumentos, es un error llamarlo sin ellos. Supongamos que simplemente queremos un objeto de caja sin dimensión inicial, o queremos inicializar un cubo especificando solo un valor que se usaría para las tres dimensiones. De la implementación anterior de la clase Box, estas opciones no están disponibles para nosotros.

Estos tipos de problemas de diferentes formas de inicializar un objeto pueden resolverse mediante la sobrecarga del constructor. A continuación se muestra la versión mejorada de la clase Box con sobrecarga del constructor.

class Box

{

    double width, height, depth;

 

    

    

    Box(double w, double h, double d)

    {

        width = w;

        height = h;

        depth = d;

    }

 

    

    

    Box()

    {

        width = height = depth = 0;

    }

 

    

    Box(double len)

    {

        width = height = depth = len;

    }

 

    

    double volume()

    {

        return width * height * depth;

    }

}

 

public class Test

{

    public static void main(String args[])

    {

        

        

        Box mybox1 = new Box(10, 20, 15);

        Box mybox2 = new Box();

        Box mycube = new Box(7);

 

        double vol;

 

        

        vol = mybox1.volume();

        System.out.println(" Volume of mybox1 is " + vol);

 

        

        vol = mybox2.volume();

        System.out.println(" Volume of mybox2 is " + vol);

 

        

        vol = mycube.volume();

        System.out.println(" Volume of mycube is " + vol);

    }

}

Producción:

Volume of mybox1 is 3000.0
Volume of mybox2 is 0.0
Volume of mycube is 343.0

Usando this () en la sobrecarga del constructor

Esta referencia () se puede usar durante la sobrecarga del constructor para llamar al constructor predeterminado implícitamente desde el constructor parametrizado. Tenga en cuenta que esta () debería ser la primera declaración dentro de un constructor.

class Box

{

    double width, height, depth;

    int boxNo;

 

    

    

    Box(double w, double h, double d, int num)

    {

        width = w;

        height = h;

        depth = d;

        boxNo = num;

    }

 

    

    Box()

    {

        

        width = height = depth = 0;

    }

 

    

    Box(int num)

    {

        

        

        this();

 

        boxNo = num;

    }

 

    public static void main(String[] args)

    {

        

        Box box1 = new Box(1);

 

        

        System.out.println(box1.width);

    }

}

Producción:

0.0

Como podemos ver en el programa anterior, llamamos al constructor Box (int num) durante la creación del objeto usando solo el número de caja. Al usar esta declaración () dentro de él, se llama implícitamente al constructor predeterminado (Box ()) que inicializará la dimensión de Box con 0.

Nota : La llamada al constructor debe ser la primera instrucción en el cuerpo del constructor. Por ejemplo, el siguiente fragmento no es válido y arroja un error de tiempo de compilación.

Box(int num)
{
    boxNo = num;

    /* Constructor call must be the first
       statement in a constructor */
    this();  /*ERROR*/
}

Puntos importantes a tener en cuenta al realizar la sobrecarga de constructores:

  • La llamada al constructor debe ser la primero declaración de constructor en Java.
  • Si hemos definido algún constructor parametrizado, el compilador no creará el constructor predeterminado. y viceversa si no definimos ningún constructor, el compilador crea el constructor predeterminado (también conocido como constructor no-arg) por defecto durante la compilación
  • La llamada recursiva al constructor no es válida en java.

Sobrecarga de constructores vs sobrecarga de métodos

Estrictamente hablando, la sobrecarga de constructores es algo similar a la sobrecarga de métodos. Si queremos tener diferentes formas de inicializar un objeto usando un número diferente de parámetros, entonces debemos hacer una sobrecarga del constructor como lo hacemos con la sobrecarga del método cuando queremos diferentes definiciones de un método basadas en diferentes parámetros.

Este artículo es una contribución de Gaurav Miglani. Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o envíe su artículo por correo electrónico a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

¡Atención lector! No dejes de aprender ahora. Hazte con todo lo importante Fundación Java y conceptos de colecciones con el Curso de Fundamentos de Java y Colecciones de Java a un precio asequible para los estudiantes y prepárese para la industria. Para completar su preparación desde el aprendizaje de un idioma hasta DS Algo y muchos más, consulte Curso completo de preparación para entrevistas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

apple touch icon@2

git – Gitignore no funciona

Testamento vs testamento vital: diferencia y comparación