Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/10/2015, 04:00
Kritik
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 1 mes
Puntos: 31
Clases no instanciables

Estoy empezando un nuevo curso online de java a través de videos del YouTube (qué buena idea la del creador, pues seguro se está forrando... y qué bien viene para el alumno) que lo recomiendo pues está genial y está disponible en Pildoras Informáticas y hemos llegado al modificador static, explicando un valor estático y un método estático. Hemos visto un ejemplo de cuando puede venir bien tener un valor estático y un método estático.

También nos ha hecho referencia a otros métodos estáticos predefinidos en java, como pueden ser todos los de la clase Math. Y es aquí donde yo he empezado a ir un poco más allá, y donde me surgen las dudas.

En el ejemplo de la clase que hemos hecho el atributo estático y el método estático que la devuelve construimos objetos de esa clase. Es decir... instanciamos y creamos copias tanto de sus atributos como de sus métodos.

Sin embargo... he intentado instanciar la clase Math y me ha dado un error. Lo primero que he pensado es que en la declaración de la clase llevaba el modificador static. Así pues a mi clase se lo he puesto... y me ha dado un error. Eclipse solo me daba una solución: Eliminar el modificador static. Entonces... ¿como Math no se puede instanciar? He ido al error que me daba al intentar instanciar... y eclipse me decía que no había ningún constructor visible.

Por otra parte, en otras clases sin declarar constructor, siempre funciona el constructor vacio (el que no recoge parámetros) aunque no esté declarado.

Así pues... con los conocimientos que yo poseo (no se si muchos o pocos) solo me da para una única conclusión: Math tiene declarado un constructor sin parámetros que está declarado como private.

Y con esta conclusión... voy a aplicarla a mi ejemplo de la clase empleado. Cojo mi clase empleado y pongo su constructor como private... ¿y qué pasa? en mi void main, donde declaro las instanciaciones me dan error. Lógico pues ya no tienen un constructor al que acudir para instanciar (era consecuencia buscada). Pero sigo pudiendo acceder a los métodos que antes tenía creados como estáticos acudiendo a ellos como clase.método(parametros). Y además me doy cuenta de que no puedo acceder a los métodos que no son estáticos, aunque sean públicos. Así pues... mi objetivo está cumplido. Obtención de una clase que no se pueda instanciar, como la de Math con métodos estáticos que hagan cosas, o devuelvan cosas.


=====================


La pregunta final es: Para conseguir una clase no instanciable en java, con atributos variables no instanciables, atributos constantes no instanciables y métodos no instanciables... ¿es así como se consigue (declarando un solo constructor sin parámetros que sea private) o se hace de alguna otra manera?

Última edición por Kritik; 06/10/2015 a las 04:12