Sunteți pe pagina 1din 19

This y static

This
Normalmente, dentro del cuerpo de un
mtodo de un objeto se puede referir
directamente a las variables miembros del
objeto. Sin embargo, algunas veces no se
querr tener ambigedad sobre el nombre
de la variable miembro y uno de los
argumentos del mtodo que tengan el
mismo nombre.
Por ejemplo, el siguiente constructor de
la clase HSBColor inicializa alguna
variable miembro de un objeto de
acuerdo a los argumentos pasados al
constructor. Cada argumento del
constructor tiene el mismo nombre que
la variable del objeto cuyo valor
contiene el argumento.
class HSBColor {
int hue, saturacion, brillo;
HSBColor (int luminosidad, int saturacion, int brillo) {
this.luminosidad = luminosidad;
this.saturacion = saturacion;
this.brillo = brillo;
}
}
Se debe utilizar this en este constructor para
evitar la ambigedad entre el argumento
luminosidad y la variable miembro
luminosidad (y as con el resto de los
argumentos). Escribir luminosidad =
luminosidad; no tendra sentido. Los nombres
de argumentos tienen mayor precedencia y
ocultan a los nombres de las variables miembro
con el mismo nombre. Para referirise a la variable
miembro se debe hacer explicitamente a travs
del objeto actual--this.
Variables y Mtodos
Estticos
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 mtodo
como esttico, lo que evita que el mtodo pueda
acceder a las variables de instancia no estticas:
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 modificacin de la variable
numero_de_capitulos no funciona porque se est
violando una de las reglas de acceso al intentar
acceder desde un mtodo esttico a una variable
no esttica.
Todas las clases que se derivan, cuando se
declaran estticas, comparten la misma pgina de
variables; es decir, todos los objetos que se
generen comparten la misma zona de memoria.
Las funciones estticas se usan para acceder
solamente a variables estticas.
class UnaClase {
int var;
UnaClase()
{
var = 5;
}
UnaFuncion()
{
var += 5;
}
}
En el cdigo anterior, si se llama a la
funcin UnaFuncion a travs de un puntero
a funcin, no se podra acceder a var,
porque al utilizar un puntero a funcin no
se pasa implcitamente el puntero al propio
objeto (this). Sin embargo, s se podra
acceder a var si fuese esttica, porque
siempre estara en la misma posicin de
memoria para todos los objetos que se
creasen de UnaClase.
Tambin se puede utilizar this para
llamar a uno de los mtodos del objeto
actual. Esto slo es necesario si existe
alguna ambigedad con el nombre del
mtodo y se utiliza para intentar hacer
el cdigo ms claro.
Sobrecarga de mtodos
En la definicin de constructores y
mtodos tenemos que tener en cuenta
un nuevo concepto de la programacin
orientada a objetos. La sobrecarga. La
sobrecarga consiste en poder tener
varios mtodos o constructores con el
mismo nombre dentro de una misma
clase y que no hagan las mismas cosas.
Esto se consigue de una manera muy
sencilla, se diferencian entre ellos
mediante el nmero y tipo de parmetros
que reciben. Veamos un ejemplo:
/*tenemos dos mtodos que pueden por
ejemplo obtener el rea de una figura
geomtrica en concreto, podran ser:*/
float obtenerAreaCirculo(Circulo ci){}
float obtenerAreaCuadrado(Cuadrado cu){}
en Java esto se puede abreviar teniendo dos
mtodos sobrecargados, por ejemplo:
float obtenerArea(Circulo ci){..}
float obtenerArea(Cuadrado cu){..}
A la hora de ejecutar el mtodo obtenerArea
se utilizar el que corresponda al parmetro
que se le pase por cabecera
Conversin de tipos de
datos
En Java es posible transformar el tipo de una
variable u objeto en otro diferente al original
con el que fue declarado. Este proceso se
denomina "conversin", "moldeado" o
"tipado". La conversin se lleva a cabo
colocando el tipo destino entre parntesis, a
la izquierda del valor que queremos convertir
de la forma siguiente:
Conversin de tipos de
datos
char c = (char)System.in.read();
La funcin read devuelve un valor int, que se
convierte en un char debido a la conversin
(char), y el valor resultante se almacena en
la variable de tipo carcter c.
Conversin de tipos de
datos
El tamao de los tipos que queremos
convertir es muy importante. No todos los
tipos se convertirn de forma segura. Por
ejemplo, al convertir un long en un int, el
compilador corta los 32 bits superiores del
long (de 64 bits), de forma que encajen en
los 32 bits del int, con lo que si contienen
informacin til, esta se perder.
Conversin de tipos de
datos
Por ello se establece la norma de que "en las
conversiones el tipo destino siempre debe
ser igual o mayor que el tipo fuente":
Tipo Origen Tipo Destino
byte double, float, long, int, char, short
short double, float, long, int
char double, float, long, int
int double, float, long
long double, float
float double

S-ar putea să vă placă și