que java constructor this constructor-overloading

que - overloading java



¿Qué significa el método "this()"? (8)

Me encontré con este bloque de código, y hay una línea que no dejo de entender el significado o lo que está haciendo.

public Digraph(In in) { this(in.readInt()); int E = in.readInt(); for (int i = 0; i < E; i++) { int v = in.readInt(); int w = in.readInt(); addEdge(v, w); } }

Entiendo lo que son this.method() o this.variable , pero ¿qué es this() ?


Es casi lo mismo

public class Test { public Test(int i) { /*construct*/ } public Test(int i, String s){ this(i); /*construct*/ } }


Este fragmento de código es un constructor.

Esta llamada a this llama a otro constructor de la misma clase

public App(int input) { } public App(String input) { this(Integer.parseInt(input)); }

En el ejemplo anterior tenemos un constructor que toma un int y uno que toma un String . El constructor que toma una String convierte la String en una int y luego delega en el constructor int .

Tenga en cuenta que una llamada a otro constructor o un constructor de superclase ( super() ) debe ser la primera línea en un constructor.

Tal vez eche un vistazo a this para una explicación más detallada de la sobrecarga del constructor.


Esto es sobrecarga de constructor:

public class Diagraph { public Diagraph(int n) { // Constructor code } public Digraph(In in) { this(in.readInt()); // Calls the constructor above. int E = in.readInt(); for (int i = 0; i < E; i++) { int v = in.readInt(); int w = in.readInt(); addEdge(v, w); } } }

Puedes decir que este código es un constructor y no un método por la falta de un tipo de devolución. Esto es muy similar a llamar a super() en la primera línea del constructor para inicializar la clase extendida. Debería llamar a this() (o cualquier otra sobrecarga de this() ) en la primera línea de su constructor y así evitar las duplicaciones de código de constructor.

También puedes echar un vistazo a esta publicación: Sobrecarga de constructores en Java: mejor práctica


Llamar a this esencialmente llama a la clase Constructor. Por ejemplo, si está ampliando algo, que junto con add(JComponent) , podría hacer: this.add(JComponent).


Otro constructor de la clase Digraph con un parámetro int.

Digraph(int param) { /* */ }


Sobrecarga del Constructor:

ex:

public class Test{ Test(){ this(10); // calling constructor with one parameter System.out.println("This is Default Constructor"); } Test(int number1){ this(10,20); // calling constructor with two parameter System.out.println("This is Parametrized Constructor with one argument "+number1); } Test(int number1,int number2){ System.out.println("This is Parametrized Constructor with two argument"+number1+" , "+number2); } public static void main(String args[]){ Test t = new Test(); // first default constructor,then constructor with 1 parameter , then constructor with 2 parameters will be called } }


Usando this () como una función como esa, esencialmente llama al Constructor de la clase. Esto le permite todas las inicializaciones genéricas en un constructor y tiene especializaciones en otros. Entonces, en este fragmento de código, por ejemplo, la llamada a this(in.readInt()) llama al constructor Digraph que tiene un argumento int.


this(); es un constructor que se usa para llamar a otro constructor en una clase, por ejemplo:

class A{ public A(int,int) { this(1.3,2.7);-->this will call default constructor //code } public A() { //code } public A(float,float) { this();-->this will call default type constructor //code } }

Nota: no usé this() constructor en el constructor predeterminado porque conducirá al estado de interbloqueo.

Espero que esto te ayudará:)