Definición de un constructor
Si se desea que los objetos de la clase Circulo no se construyan con base en la forma por omisión, en el ejemplo 5 se muestra un constructor que permite especificar los valores iniciales para el centro y el radio de los nuevos objetos Circulo.
El ejemplo ilustra al mismo tiempo el uso de la palabra reservada this vista en la sección anterior. public class Circulo { public double x, y, r; //El método constructor public Circulo(double x, double y, double r) { this.x = x; this.y = y; this.r = r; } public double circunferencia( ) {return 2 * 3.14159 * r;} public double area( ) {return 3.14159 * r * r;} } Ejemplo 5.
Ahora, al crear un objeto de la clase Circulo, las variables de dicho objeto ya tienen valores que les son asignadas desde el constructor.
Si desea el mismo efecto, pero con el constructor anterior, obtendría algo como el siguiente código: Circulo c = new Circulo(); c.x = 1.1414; c.y = −1.0; c.r = .25; Mientras que con el nuevo constructor, la inicialización de variables se vuelve parte del proceso para crear el objeto: Circulo c = new Circulo (1.1414, −1.0, .25); Existen tres reglas importantes para nombrar a los constructores:
• El nombre del método constructor es siempre el mismo que el de la clase.
• El valor de retorno del método es implícitamente una instancia de dicha clase.
Para cualquier constructor, el tipo de valor de retorno no se especifica, ni se puede emplear la palabra reservada void.
• El objeto this regresa implícitamente; un constructor no debe usar una declaración return para regresar algún valor.
Múltiples constructores
Existen ocasiones en que se requiere de inicializar un objeto de varias formas, dependiendo de lo que resulte más práctico en algún momento determinado. En el ejemplo 6 se muestra la declaración de varios constructores para la clase Circulo. public class Circulo { public double x, y, z; public Circulo (double x, double y, double r) { this.x = x; this.y = y; this.r = r; } public Circulo(double r) { x = 0.0; y = 0.0; this.r = r;} public Circulo(Circulo c) { x= c.x; y =c.y; z = c.z;} public Circulo() { x = 0.0; y = 0.0; r = 1.0; } public double circunferencia () { return 2 * 3.14159 * r;} public double area() { return 3.14159 * r * r; } } Ejemplo 6. En este caso se definen tres constructores y todos ellos tienen el mismo nombre aunque distintos parámetros. En la siguiente sección se hace un análisis de estas implicaciones. 2.7 Sobrecarga de métodos Con el último ejemplo surge la siguiente pregunta: ¿Cómo es posible que estos métodos se llamen iguales y el compilador pueda distinguirlos? La respuesta es simple, todo se debe a la disposición de los siguientes elementos: el nombre del método, el número de parámetros, el tipo y la posición de los parámetros.
Esta cualidad se denomina sobrecarga de métodos y no es exclusiva de los métodos constructores.
Cuando se llama a un método y hay más de uno con el mismo nombre, el compilador automáticamente selecciona uno que se ajuste con los tipos de datos de los argumentos que le hayan pasado.
Resumiendo, al hecho de definir métodos con el mismo nombre y distintos tipos de argumentos se denomina Sobrecarga de método. SINTAXIS DEL CONSTRUCTOR. Primero se pone el nombre de la clase, despues el nombre del constructor de la clase que se deriva: claseD::claseD,posteriormente la lista de parametros del constructor de la clase derivada. y el cuerpo del constructor, que solo se inicializan las variables a utilizar. Observese que en la primera linea incluye una llamada al constructor de la clase vas. el constructor de la clase base se llama antes de que se ejecute el cuerpo del constructor de la clase derivada. esta secuencia tiene sentido ya que el objeto base constituye el fundamento del objeto derivado. el constructor de una clase derivada tiene que realizar dos tareas: a)inicializar el objeto base y b)inicializar todos los miembros datos.