Solución:
La diferencia importante entre los constructores y los métodos es que los constructores inicializan los objetos que se crean con el new
operador, mientras que los métodos realizan operaciones en objetos que ya existen.
Los constructores no se pueden llamar directamente; se llaman implícitamente cuando el new
palabra clave crea un objeto. Los métodos se pueden llamar directamente en un objeto que ya ha sido creado con new
.
Las definiciones de constructores y métodos tienen un aspecto similar en el código. Pueden tomar parámetros, pueden tener modificadores (p. Ej. public
), y tienen cuerpos de método entre llaves.
Los constructores deben tener el mismo nombre que el nombre de la clase. No pueden devolver nada, incluso void
(el objeto en sí es el retorno implícito).
Los métodos deben declararse para devolver algo, aunque puede ser void
.
La principal diferencia es
1.Constructor se utilizan para inicializar el estado del objeto, donde como método es exponer el comportamiento del objeto.
2.Constructor no debe tener un tipo de retorno donde como método debe tener un tipo de retorno.
3.Constructor nombre igual que el nombre de la clase donde como método puede o no puede ser el mismo nombre de clase.
4.Constructor invocar implícitamente donde como método invocar explícitamente.
5.Constructor El compilador proporciona un constructor predeterminado donde como método el compilador no proporciona.
Otros instructores y asistentes de enseñanza me dicen ocasionalmente que los constructores son métodos especializados. Yo siempre argumento que en Java los constructores NO son métodos especializados.
Si los constructores fueran métodos, esperaría que tuvieran las mismas habilidades que los métodos. Que al menos serían similares en más formas de las que son diferentes.
¿En qué se diferencian los constructores de los métodos? Déjame contar las formas…
-
Los constructores deben invocarse con el
new
operador mientras que los métodos no pueden invocarse con elnew
operador. Relacionado: los constructores no pueden llamarse por su nombre, mientras que los métodos deben llamarse por su nombre. -
Es posible que los constructores no tengan un tipo de retorno, mientras que los métodos deben tener un tipo de retorno.
-
Si un método tiene el mismo nombre que la clase, debe tener un tipo de retorno. De lo contrario, es un constructor. El hecho de que puedas tener dos Mi clase() Las firmas en la misma definición de clase que se tratan de manera diferente deberían convencer a todos de que los constructores y los métodos son entidades diferentes:
public class MyClass { public MyClass() { } // constructor public String MyClass() { return "MyClass() method"; } // method }
-
Los constructores pueden inicializar constantes de instancia, mientras que los métodos pueden no.
-
Los constructores públicos y protegidos no se heredan, mientras que los métodos públicos y protegidos sí se heredan.
-
Los constructores pueden llamar a los constructores de la superclase o la misma clase, mientras que los métodos no pueden llamar ni a super () ni a this ().
Entonces, ¿en qué se parecen los métodos y los constructores?
-
Ambos tienen listas de parámetros.
-
Ambos tienen bloques de código que se ejecutarán cuando ese bloque se llame directamente (métodos) o se invoque a través de
new
(constructores).
En cuanto a los constructores y métodos que tienen los mismos modificadores de visibilidad … los campos y métodos tienen más modificadores de visibilidad en común.
-
Los constructores pueden ser: privado, protegido, público.
-
Los métodos pueden ser: privado, protegido, público, abstracto, estático, final, sincronizado, nativo, estrictofp.
-
Los campos de datos pueden ser: privado, protegido, público, estático, final, transitorio, volátil.
En conclusión
En Java, la forma y función de los constructores es significativamente diferente a la de los métodos. Por lo tanto, llamarlos métodos especializados en realidad dificulta que los nuevos programadores aprendan las diferencias. Son mucho más diferentes que similares y aprenderlos como entidades diferentes es fundamental en Java.
Reconozco que Java es diferente a otros lenguajes en este aspecto, a saber, C ++, donde el concepto de métodos especializados se origina y es compatible con las reglas del lenguaje. Pero, en Java, los constructores no son métodos en absoluto, mucho menos métodos especializados.
Incluso javadoc reconoce que las diferencias entre los constructores y los métodos superan las similitudes; y proporciona una sección separada para constructores.