Como sabe, una clase proporciona el plano de los objetos; creas un objeto a partir de una clase. Cada una de las siguientes declaraciones tomadas del programa CreateObjectDemo
crea un objeto y lo asigna a una variable:
La primera línea crea un objeto de Point
clase, y la segunda y tercera líneas crean cada una un objeto de la Rectangle
clase.
Cada una de estas declaraciones tiene tres partes (discutido en detalle a continuación):
- Declaración: el código en negrita son todas las declaraciones de variable que asocian un nombre de variable con un tipo de objeto.
- Instanciación: la nueva palabra clave es un operador de Java que crea el objeto.
- Inicialización: El nuevo operador es seguido por una llamada a un constructor, que inicializa el nuevo objeto.
Declarar una variable para hacer referencia a un objeto
Anteriormente, aprendió que para declarar una variable, escribe:
type name;
Esto notifica al compilador que usará nombre para referirse a datos cuyo tipo es tipo. Con una variable primitiva, esta declaración también reserva la cantidad adecuada de memoria para la variable.
También puede declarar una variable de referencia en su propia línea. Por ejemplo:
Point originOne;
Si declaras originOne
así, su valor será ser indeterminado hasta que se cree y se le asigne un objeto. La simple declaración de una variable de referencia no crea un objeto. Para eso, necesita usar el operador new
, como se describe en la siguiente sección. Debe asignar un objeto a originOne
antes de usarlo en su código. De lo contrario, obtendrá un error del compilador.
Una variable en este estado, que actualmente no hace referencia a ningún objeto, se puede ilustrar de la siguiente manera (el nombre de la variable, originOne
, más una referencia que apunta a nada):
Crear una instancia de una clase
El nuevo operador crea una instancia de una clase asignando memoria para un nuevo objeto y devolviendo una referencia a esa memoria. El nuevo operador también invoca al constructor del objeto.
El nuevo operador requiere un único argumento de sufijo: una llamada a un constructor. El nombre del constructor proporciona el nombre de la clase para instanciar.
El nuevo operador devuelve una referencia al objeto que creó. Esta referencia generalmente se asigna a una variable del tipo apropiado, como:
La referencia devuelta por el nuevo operador no deben asignarse a una variable. También se puede utilizar directamente en una expresión. Por ejemplo:
int height = new Rectangle().height;
Esta declaración se discutirá en la siguiente sección.
Inicializando un Objeto
Aquí está el código para la clase Point:
public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; }}
Esta clase contiene un solo constructor. Puede reconocer un constructor porque su declaración usa el mismo nombre que la clase y no tiene tipo de retorno. El constructor en la clase Point toma dos argumentos enteros, como lo declara el código (int a, int b). La siguiente declaración proporciona 23 y 94 como valores para esos argumentos:
Point originOne = new Point(23, 94);
El resultado de ejecutar este La declaración se puede ilustrar en la siguiente figura:
Aquí está el código para la clase Rectangle, que contiene cuatro constructores:
Cada constructor le permite proporcionar valores iniciales para el origen, ancho y alto del rectángulo, usando tipos primitivos y de referencia. Si una clase tiene varios constructores, deben tener diferentes firmas. El compilador de Java diferencia t Los constructores se basan en el número y el tipo de argumentos. Cuando el compilador de Java encuentra el siguiente código, sabe que debe llamar al constructor en la clase Rectangle que requiere un argumento Point seguido de dos argumentos enteros:
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Esto llama a uno de Rectangle
«s constructores que inicializa origin
a originOne
. Además, el constructor establece width
en 100 y height
en 200.Ahora hay dos referencias al mismo objeto Point; un objeto puede tener múltiples referencias, como se muestra en la siguiente figura:
La siguiente línea de código llama al constructor Rectangle
que requiere dos argumentos enteros, que proporcionan el valores de ancho y alto. Si inspecciona el código dentro del constructor, verá que crea un nuevo objeto Point cuyos valores xey se inicializan en 0:
Rectangle rectTwo = new Rectangle(50, 100);
El constructor Rectangle usado en la siguiente declaración no «toma ningún argumento, por lo que se llama constructor sin argumentos:
Rectangle rect = new Rectangle();
Todas las clases tienen al menos un constructor. Si una clase no declara explícitamente ninguno, el compilador de Java proporciona automáticamente un constructor sin argumentos, llamado constructor predeterminado. Este constructor predeterminado llama al constructor sin argumentos del padre de la clase, o al constructor Object
si la clase no tiene otro padre. Si el padre no tiene constructor (Object
tiene uno), el compilador rechazará el programa.