¿Es un constructor en Java un método?

publicado por: Anonymous

¿Es un constructor en Java un método? ¿Es un método especial?

¿Por qué? ¿Qué hace que un constructor sea o no sea un método?

Hay ejemplos en que se dice que sí es un método, como Constructor en Java:

Un constructor es un método especial de una clase que se llama
automáticamente siempre que se declara un objeto de esa clase.

Y ejemplos en que se dice lo contrario como en 12 Rules of Overriding in Java You Should Know:

Because constructors are not methods…
Traducido: Debido a que los
constructores no son métodos…

Pregunto si un constructor es un método.
No pregunto qué es un constructor o qué es un método. Ni tampoco cuales son sus diferencias o similitudes. Estas cuestiones pueden ser relevantes para dilucidar si un constructor es o no un método, pero no son el objeto primario de la pregunta.

solución

Parece pero no es

En Java un constructor parece un método, pero en realidad no lo es.

¿Por qué? ¿Qué hace que un constructor no sea un método?

Muy sencillo, ya que no quieres que te hablen de diferencias: JAVA así lo ha decidido, por eso en su documentación siempre habla de constructores o métodos.

Además, por esbozar una definición (basada inevitablemente en las diferencias), como su nombre lo indica, un constructor tiene la capacidad de construir una instancia de una clase. Un método no construye, no crea, sólo obedece a la orden que le ha sido dada.

Constructors (§8.8) are similar to methods, but cannot be invoked directly by a method call; they are used to initialize new class instances. Like methods, they may be overloaded (§8.8.8).

Los constructores son similares a los métodos (parecen pero no son), pero no pueden ser invocados directamente por una llamada de método, sino que son usados para inicializar nuevas instancias de clases. Al igual que los métodos, pueden ser sobreescritos.

La documentación de Java siempre hace la diferencia:

8.4.2. Method Signature

Two methods or constructors, M and N, have the same signature if
they have the same name, the same type parameters (if any) (§8.4.4),
and, after adapting the formal parameter types of N to the the type
parameters of M, the same formal parameter types.

También:

8.4.1. Formal Parameters

The formal parameters of a method or constructor, if any, are
specified by a list of comma-separated parameter specifiers. If a
method or constructor has no formal parameters, only an empty pair of parentheses appears in the declaration of the method or
constructor
.

Aquí tienes un artículo interesante (en inglés).

Por ejemplo dice entre otras cosas que en una misma clase puedes tener un constructor (éste siempre lleva el nombre de la clase) y un método con el mismo nombre… los dos funcionarán de forma distinta, haciendo cada uno la función para la que existe.

En resumen, un constructor parece un método, pero es sencillamente un constructor, porque JAVA quiere que así sea. 🙂


Algunas diferencias esclarecedoras:

  • La diferencia importante entre constructores y métodos es que los constructores crean e inicializan objetos que aún no existen, mientras que los métodos realizan operaciones en objetos que ya existen.

  • Los constructores no pueden ser llamados directamente. Se llaman implícitamente cuando la palabra clave new crea un objeto. Los métodos se pueden llamar directamente a un objeto que ya se ha creado con new.

  • Las definiciones de constructores y métodos parecen similares en código. Pueden tomar parámetros, pueden tener modificadores (por ejemplo, públicos), y tienen cuerpos de método.

  • Los constructores deben ser nombrados con el mismo nombre que el nombre de la clase. No pueden devolver nada, ni siquiera vacío (void) (el objeto mismo es el retorno implícito).

  • Los métodos deben ser declarados para devolver algo, y cuando no devuelven nada tiene que ser indicado usando void .

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *