En ésta ocasión hablaremos de constructores. Los constructores son los bloques de código que comparten el mismo nombre de la clase y cuya función es crear objetos de una clase e iniciar sus atributos.
- Un constructor siempre debe tener el mismo nombre que la clase.
- Un constructor no tiene un tipo de retorno por lo cual no devuelve algún valor. Un método puede o no tener un tipo de valor de retorno.
- Un constructor es llamado al crearse una instancia de un objeto, y esto solo se realiza una única vez, a diferencia de los métodos que pueden ser llamados en múltiples ocasiones.
- Los constructores nunca son heredados, ya que no son considerados como miembros de clase. Esto es una diferencia importante con respecto a los métodos ya que estos si podrían ser heredados.
- Cuando heredamos de una clase base, si no se declara un constructor, java automáticamente llama al constructor por defecto de la clase que heredamos.
1. private: Significa que únicamente puede ser accesible desde la clase que lo define.
Ejemplo.
package com.codemonkey.pack1; import static java.lang.System.out; public class Punto{ private String x; private String y; //private: accesible solo desde la misma clase private Punto(){ out.println("Objeto Punto creado e inicializado"); } //... }
Si el programador quiere crear una instancia de la clase Punto no podría.
package com.codemonkey.test; //importamos la clase Punto import com.codemonkey.pack1.Punto; /*Esto no puede compilar el constructor Punto() es private y por lo tanto sólo accesible desde la misma clase */ Punto punto = new Punto();
2. default (ninguno): Únicamente las clases de su mismo paquete pueden acceder a el.
Ejemplo.
package com.codemonkey.pack1; import static java.lang.System.out; public class Defecto{ /*default: solo clases del mismo paquete pueden acceder al constructor*/ Defecto(){ out.println("No podras ver esto si no eres clase del mismo paquete"); } }
Si el programador quiere crear una instancia de la clase Defecto desde una clase diferente del paquete en el que se encuentra ésta clase no podrá hacerlo.
package com.codemonkey.test; import com.codemonkey.pack1.Defecto //... /*Esto no compilará: Defecto es default y por los tanto sólo accesible a clases del mismo paquete*/ Defecto defecto = new Defecto();
3. protected: Sólo accesible si la clase donde se pretende crear la instancia pertenece a la misma clase o si es una subclase.
Ejemplo.
package com.codemonkey.pack1; import static java.lang.System.out; public class Punto{ private String x; private String y; /*protected: accesible desde otra clase si pertenece al mismo paquete o es una subclase*/ protected Punto(String x, String y){ this(); this.x=x; this.y=y; } //... }
Lo que significa que si hacemos algo como esto no podrá compilarse el código:
package com.codemonkey; /** * Main.java */ import com.codemonkey.pack1.Punto; //... /*Esto no compilara: Punto(String x, String y) es protected. La clase Main no pertenece al paquete com.codemonkey.pack1 donde esta la clase Punto*/ Punto p = new Punto("34.6","44.2");
La clase Main.java debería estar en el paquete com.codemonkey.pack1 para poder acceder al constructor Punto().
4. public: Significa que siempre es visible y se puede acceder a el desde cualquier otra clase sin importar el paquete.
Ejemplo.
package com.codemonkey.pack1; public class Ejemplo{ /*Constructor public: siempre visible*/ public Ejemplo(){ System.out.println("Hola, mundo!!"); } }
El programador no tendrá problema en hacer algo como esto:
package com.codemonkey; import com.codemonkey.pack1.Ejemplo; //... Ejemplo ejemplo = new Ejemplo(); //Salida: //Hola, mundo!!
Links:
Comentarios
Publicar un comentario