En un momento determinado se puede querer crear una clase en la que el valor de una variable de instancia sea el mismo (y de hecho sea la misma variable) para todos los objetos instanciados a partir de esa clase. Es decir, que exista una única copia de la variable de instancia. Se usará para ello la palabra clave static.
class Documento extends Pagina { static int version = 10; }
El valor de la variable version
será el mismo para
cualquier objeto instanciado de la clase Documento. Siempre que
un objeto instanciado de Documento cambie la variable version
,
ésta cambiará para todos los objetos.
De la misma forma se puede declarar un método como estático, lo que evita que el método pueda acceder a las variables de instancia no estáticas:
class Documento extends Pagina { static int version = 10; int numero_de_capitulos; static void annade_un_capitulo() { numero_de_capitulos++; // esto no funciona } static void modifica_version( int i ) { version++; // esto si funciona } }
La modificación de la variable numero_de_capitulos
no funciona porque se está violando una de las reglas de
acceso al intentar acceder desde un método estático
a una variable no estática.
Todas las clases que se derivan, cuando se declaran estáticas, comparten la misma página de variables; es decir, todos los objetos que se generen comparten la misma zona de memoria. Las funciones estáticas se usan para acceder solamente a variables estáticas.
class UnaClase { int var; UnaClase() { var = 5; } UnaFuncion() { var += 5; } }
En el código anterior, si se llama a la función
UnaFuncion a través de un puntero a función, no
se podría acceder a var
, porque al utilizar un puntero
a función no se pasa implícitamente el puntero al
propio objeto (this). Sin embargo, sí se podría
acceder a var si fuese estática, porque siempre estaría
en la misma posición de memoria para todos los objetos
que se creasen de UnaClase.
|
[Anterior] [Indice] [Siguiente] |