viernes, 1 de junio de 2012

Constructores

Buenas amigos, en este nuevo tema vamos a hablar de los constructores:

Un "constructor" es un método especial que se ejecuta en el momento que se crea un objeto de la clase (new).  Su misión es reservar memoria e inicializar las variables miembro de la clase.



Debemos tener en cuenta ciertas cosas a la hora de crear un constructor:

  • Los constructores no tienen valor de retorno, ni siquiera "void".

  • El nombre tiene que ser el mismo que el de la clase.

  • Una clase puede tener varios constructores, se diferencian así mismo por la cantidad de argumentos y su tipo(sobrecargados), mas adelante explicaremos lo que son métodos sobrecargados y sobrescritos.

  • En caso de no poner ningún constructor, Java nos pone un por defecto (invisible), con el mismo nombre y modificador de acceso que la clase y con una sola linea de código (super()). TODAS las clases llevan constructor, ya sea explicito o implícito.
Una cosa antes de continuar, vamos a hacer referencia a palabras claves de Java (this, super), en el siguiente post explicaremos que quiere decir, y completaremos la información que vaya dando en este post. 

  • Un constructor de una clase puede llamar a otro constructor de la misma clase haciendo referencia con la palabra clave this. Esta palabra clave solo puede aparecer en la primera linea de código de un constructor.

  • Un constructor de una subclase puede llamar a otro constructor de su superclase con la palabra super();

  • Los constructores pueden tener cualquiera de los 4 tipos de modificadores de acceso (public, protected, default o package y private)

  • Dentro de una clase los constructores solo pueden ser llamados por otros constructores o por métodos "static".
Pongamos un ejemplo en el que podamos ver todo esto:

Tenemos una primera clase, sin método "main" con 2 constructores, uno con parámetros y otros sin parámetros:

























Podemos observar que tenemos 2 constructores, con distintos tipos de datos, a esto se le llama sobrecarga, 2 constructores con el mismo nombre pero que realizan funciones diferentes para llegar a una misma ejecución. Yo solo he puesto 2, pero puedes poner todos los que quieras siempre y cuando no se repita ningún patrón.

Esta clase es para calcular el área de un rectángulo, pero al no llevar método "main", si le damos a ejecutar, no hace nada. Necesitamos un método "main", el cual vamos a poner en una segunda clase.

Esta segunda clase no tiene variables, solo tiene un método "main", y desde allí llamaremos a los constructores de la anterior clase para obtener el área del rectángulo:





En esta clase primero creamos un objeto llamado "c" de la clase Constructores. Al pasarle un constructor sin argumentos se nos irá a la clase anterior donde el constructor no tiene argumentos, el cual llamará a otro constructor pasándole dos argumentos puestos por nosotros por defecto. Digamos que es un constructor por defecto.

Imprimimos por pantalla el área del rectángulo el cual debe darnos 9 ya que por defecto, yo he puesto base 3 y altura 3.

Posteriormente creamos otro objeto de la misma clase anterior llamado "c1", a este constructor le paso los 2 argumentos que me exige el constructor, pasando a valer 3 la base y 5 la altura e imprimimos por pantalla el objeto "c1" dándonos como resultado 15.

Para los que empiezan en este mundo, no os asustéis si no entendéis muy bien los constructores....son tan comunes que al final sin más narices os saldrá mecánico.

En temas posteriores profundizaremos en las palabras reservadas this y super.

Un saludo a todos.


6 comentarios:

  1. Excelente!!!Me gustaria un proyecto completo
    utilizando los gett y sett+herencia+polimorfismo..etc

    ResponderEliminar
  2. No esta completo no falta casi nada.Perdon

    ResponderEliminar
  3. Como bien dices, debo de hacer un proyecto de envergadura con todo lo que hemos visto, pero antes me gustaría hacer unos cuantos temas más para que unas pocas cosas de menor importancia queden claras también. Me apunto tu sugerencia.

    Un saludo

    ResponderEliminar
  4. disculpe una pregunta en que libro se puede buscar esa información

    ResponderEliminar