|
NOTA: La traducción de esta documentación es un esfuerzo personal y voluntario, no es un documento oficial de Sun Microsystems
ni Oracle ni está patrocinado por ninguna de estas empresas. Los documentos originales (en inglés) están disponibles en:
http://java.sun.com/docs/books/tutorial/.
Dirija cualquier comentario, petición, felicitación, etc. a tutorialesjava_@RROBA_codexion.com. |
Si desea ayudar a mantener en funcionamiento esta web, colaborar con la traducción de estos documentos o necesita que se traduzca algĂșn capĂtulo en concreto puede realizar una donación directa mediante Paypal:
|
Como sabe, una clase proporciona los planos para un objeto; puede crear un objeto de una clase. Cada una de las siguientes sentencias tomadas del programaCreateObjectDemocrea un objeto y lo asigna a una variable:La primera línea crea un objeto de la clasePoint originOne = new Point(23, 94); Rectangle rectOne = new Rectangle(originOne, 100, 200); Rectangle rectTwo = new Rectangle(50, 100);Point, mientras que la segunda y la tercera crean un objeto de la claseRectangle.Cada una de estas sentencias tiene tres partes:
- Declaración: El código en negrita son declaraciones de variables que asocian un nombre de variable con un tipo de objeto.
- Instanciación: La palabra clave new es un operador Java que crea el objeto.
- Inicialización: El operador new precede a una llamada a un constructor, que inicializa el objeto nuevo.
Declarar una variable para que se refiera a un objeto
Anteriormente hemos aprendido que, para declarar una variable, se debe escribir:Esto le indica al compilador que se utilizará 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.tipo nombre;También se puede declarar una variable de referencia en su propia línea. Por ejemplo:
Si declaraPoint originOne;originOnede este modo, su valor será indeterminado hasta que en efecto se cree un objeto y se le asigne. La simple declaración de una variable de referencia no crea un objeto. Para ello necesitará utilizar el operadornewtal y como se describe en la siguiente sección. Debe asignar un objeto aoriginOneantes de utilizarlo en su código. De lo contrario obtendrá un error de compilación.Una variable en este estado, que no referencia a ningún objeto, se puede ilustrar del siguiente modo (el nombre de variable,
originOne, más una referencia apuntando a nada):Instanciar una clase
El operador new instancia una clase reservando memoria para un objeto nuevo y devolviendo una referencia a esa memoria. El operador new también invoca al constructor de objetos.
Nota: La frase «instanciar una clase» significa lo mismo que «crear un objeto».Cuando se crea un objeto, se crea una «instancia» de una clase, por lo tanto «se instancia» una clase.El operador new requiere un solo argumento posterior: una llamada a un constructor. El nombre del constructor proporciona el nombre de la clase que se instanciará.
El operador new devuelve una referencia al objeto que ha creado. Esta referencia normalmente se asigna a una variable del tipo apropiado, como:
La referencia devuelta por el operador new no tiene por qué ser asignada a una variable. También se puede usar directamente en una expresión. Por ejemplo:Point originOne = new Point(23, 94);Esta sentencia se tratará en la siguiente sección.int height = new Rectangle().height;Inicializar un objeto
Este es el código de la clase Point:Esta clase contiene un solo constructor. Se puede reconocer a un constructor porque su declaración utiliza el mismo nombre que la clasey no tiene tipo de retorno. El constructor de la clase Point toma dos argumentos enteros, como declarado en el código (int a, int b). La siguiente sentencia proporciona 23 y 94 como valores para esos argumentos:public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; } }El resultado de ejecutar esta sentencia está ilustrado en la siguiente figura:Point originOne = new Point(23, 94);Éste es el código de la clase Rectangle, que contiene cuatro constructores:
Cada constructor le permite proporcionar valores iniciales para el tamaño y anchura del rectángulo, utilizando tanto tipo primitivos como de referencia. Si una clase tiene varios constructores, éstos deben tener diferentes firmas. El compilador Java diferencia los constructores basándose en la cantidad y el tipo de los argumentos. Cuando el compilador Java se encuentra con el siguiente código sabe que debe llamar al constructor de la clase Rectangle que necesita un argumento de tipo Point seguido de dos enteros:public class Rectangle { public int width = 0; public int height = 0; public Point origin; // cuatro constructores public Rectangle() { origin = new Point(0, 0); } public Rectangle(Point p) { origin = p; } public Rectangle(int w, int h) { origin = new Point(0, 0); width = w; height = h; } public Rectangle(Point p, int w, int h) { origin = p; width = w; height = h; } // un método para mover el rectángulo public void move(int x, int y) { origin.x = x; origin.y = y; } // un método para calcular el área del rectángulo public int getArea() { return width * height; } }Esto llama a uno de los constructores deRectangle rectOne = new Rectangle(originOne, 100, 200);Rectangleque inicializaoriginaoriginOne. El constructor tamién fijawidtha 100 yheighta 200. Ahora hay dos referencias al mismo objeto Point object - un objeto puede tener varias referencias a él, como se muestra en la siguiente figura:La siguiente línea de código llama al constructor de ![]()
Rectangleque necesita dos argumentos enteros que proporcionan los valores iniciales para width y height. Si inspecciona el código dentro del constructor verá que crea un nuevo objeto Point cuyos valores x e y se inicializan a 0:El constructor de Rectangle utilizado en la siguiente sentencia no toma ningún argumento, por lo que se denomina un constructor sin argumentos:Rectangle rectTwo = new Rectangle(50, 100);Todas las clases tienen por lo menos un constructor. Si una clase no declara uno explícitamente, el compilador Java proporciona automáticamente un constructor sin argumentos, llamado el constructor predeterminado. Este constructor predeterminado llama al cosntructor sin argumentos de la clase padre, o el constructor deRectangle rect = new Rectangle();Objectsi la clase no tiene otro padre. Si el padre no tiene constructor (Objectno lo tiene), el compilador rechazará el programa.