Sei sulla pagina 1di 5

Modificadores

de acceso 04
JA
Bauman / Dcima

Java Electrotecnia
Modificadores de acceso
Java

Variables y mtodos de clase


Una variable o mtodo de clase es aquel que existe solamente una vez para la clase. Por ejemplo, una
variable de clase no se crea cada vez que se crea una nueva instancia de la clase. Esto es til para
variables que guardan informacin que se aplica a la clase complete.

Para crear una variable o mtodo de clase se incluye simplemente la palabra static antes del nombre
del mtodo. El modificador static se pone generalmente despus de cualquier modificador de
proteccin.

La palabra static viene de C y C++. Aunque en estos lenguajes static tiene un significado
especifico relativo a dnde se guarda el mtodo o variable en la memoria en tiempo de ejecucin del
programa, en Java significa simplemente que esta guardada en la clase. Cada vez que vea la palabra
static recuerde sustituirla mentalmente con la palabra class.

Las variables y mtodos de clase pueden accederse usando la notacin de punto estndar con el
nombre de la clase o con un objeto al lado izquierdo del punto. Sin embargo, la convencin es usar
siempre el nombre de la clase para dejar claro que se esta usando una variable de clase y para ayudar a
que el rector sepa instantneamente que la variable es global para todas las instancias. Estos Son unos
ejemplos:

float circunferencia = 2 * Circulo.pi * obtenerRadio();


float numeroAleatorio = Math.random();

Las variables de clase, por las mismas razones que las variables de instancia, tambin pueden
beneficiarse de ser declaradas private y de tener mtodos de acceso para obtener o establecer sus
valores.

Finalizacin de clases, mtodos y variables


Cuando el modificador final se aplica a una clase significa que la clase no puede ser subclaseada.
Cuando se aplica a una variable, final significa que la variable es constante.
Cuando se aplica a un mtodo, final significa que el mtodo no puede ser especializado por las
subclases.

La finalizacin (mediante el uso del modificador final) congela la implementacin de una clase,
mtodo o variable.

Finalizacin de clases
Para finalizar una clase aada el modificador final a su definicin. final va, por lo general, despus de
cualquier modificador de proteccin como private o public:

public final class UnaClaseFinal {


}

2 POLITECNICO
Se declara a una clase como final por alguna de dos razones: Para impedir que otros creen subclases
de la clase. Si la clase tiene todas las capacidades que necesita y nadie mas debe extender sus
capacidades, esa clase debe ser final.

Para mejor eficiencia tal vez quiera que el programa sea capaz de contar con que slo hay instancias
de esa clase (y no de subclases) en el sistema a fin de que se pueda hacer una optimizacin de ellas.

La biblioteca de clases Java use ampliamente las clases final. Las clases que han sido finalizadas por
razones de seguridad son java.lang.System, java.net.InetAddress y java.net.Socket.
Un buen ejemplo de la segunda razn es java.lang.String. Las cadenas son tan comunes en Java
y tan centrales para el que el sistema de tiempo de ejecucin las maneja en forma especial (tambin por
razones de seguridad).
En la mayora de los casos ser un evento raro que usted cree una clase final, debido a que las clases
extensibles son mucho mas tiles que las clases finalizadas, y las ganancias de eficiencia son mnima. Sin
embargo, lo mas probable es que tendr muchas oportunidades de molestarse porque determinadas
clases del sistema sean final (lo que hace mas difcil su extensin).

Variables finalizadas
Una variable finalizada significa que su valor no puede ser cambiado. Esto es efectivamente una
constante. Para declarar constantes en Java use las variables final con valores iniciales:

final int a = 26;

Las variables locales (aquellas que se encuentra dentro de bloques de cdigo entre llaves, por ejemplo,
en ciclos while o for) no pueden ser declaradas final.

Mtodos finalizados
Los mtodos finalizados son mtodos que no pueden ser especializados, esto es, sus implementaciones
estn congeladas y no pueden ser redefinidas en subclases.

La nica razn por la que se declare un mtodo como final es por eficiencia. Normalmente, las firmas e
implementaciones de mtodos son apartadas cuando ejecutan el programa Java debido a que el mtodo
puede encontrarse en la clase actual o en cualquier subclase. Por lo tanto, cuando se llama a un mtodo,
Java revise la clase actual y cada una de las superclases respectivas buscando esa definicin. Aunque esto
hace que los mtodos sean muy flexibles para definir y usar, no es muy rpido.

Sin embargo, si se declare un mtodo final, el compilador puede entonces ponerlo en lnea (incrustar
su definicin) directamente en medio de los mtodos que lo llaman, debido a que sabe que nadie puede
jams subclasear y especializar el mtodo para cambiar su significado. Aunque tal vez no use final
inmediatamente cuando escribe una clase, conforme afine posteriormente al sistema puede descubrir que
unos cuantos mtodos tienen que ser final para hacer que la clase sea lo suficientemente rpida. Sin
embargo, casi todos los mtodos estarn bien as como son.

Si se usan mucho los mtodos de acceso (como se recomienda) el cambio de los mtodos de acceso
para que sean final puede ser una forma rpida para agilizar la clase. Debido a que las subclases rara
vez querrn cambiar las definiciones de los mtodos de su antecesor, hay pocas razones por las que estos
mtodos no deban ser final.

POLITECNICO 3
Modificadores de acceso
Java

La biblioteca de clases Java declara como final a muchos de los mtodos usados comnmente a fin
de que usted se beneficie con la agilizacin. En el cave de las clases que ya son final esto tiene sentido y
es una decisin sabia. Los pocos mtodos final declarados en clases que no sean final lo confundirn, ya
que las subclases no podrn especializarlos. Cuando la eficiencia no llega a ser preocupante en el
ambiente Java, muchos de estos mtodos final pueden volverse a descongelar restaurando la
flexibilidad perdida del sistema.

Los mtodos private son efectivamente final al igual que lo son todos los mtodos declarados en
una clase final. El hacer que estos mtodos sean final (como lo hace a veces la biblioteca Java) es
legal, pero redundante, ya que el compilador ya los trata como final.

Es posible usar mtodos final por algunas de las mismas razones de seguridad por las que se usan
clases final, pero es un evento mucho ms raro.

Clases y mtodos abstract


Cada vez que se acomodan clases en una jerarqua de herencia se presume que entre mas altas son las
clases son mas abstractas y generales, y en cambio, entre mas bajas son las subclases son mas concretes
y especificas. Frecuentemente cuando se disean jerarquas de clases el diseo e implementacin
comunes se dividen en una superclase compartida. Esta superclase no tendr ninguna instancia, ya que su
sola razn de existir es actuar como un depsito comn compartido para informacin que usan sus
subclases. Este tipo de clases son llamadas clases abstractas y se les declare usando el modificador
abstract.

public abstract class Fruta {


}

Nunca se puede hacer instancias de las clases abstract (ya que se obtiene un error de compilacin),
pero pueden contener cualquier cosa que pueda contener una clase normal, incluyendo variables de clase
e instancia y mtodos con cualquier tipo de modificado res de proteccin o finalizacin. Adems, las clases
abstractas tambin pueden contener mtodos abstractos. Un mtodo abstracto es una firma de mtodo
sin implementacin, y se espera que las subclases de la clase abstracta proporcionen la implementacin
para ese mtodo. De esta forma los mtodos abstractos proporcionan el mismo concepto bsico que las
clases abstractas, y son una forma de dividir un comportamiento comn en las superclases y luego
proporcionar usos concretos especficos de esos comportamientos en las subclases.

Las clases abstractas son clases cuyo nico propsito es proporcionar informacin comn para las
subclases. Las clases abstractas no pueden tener instancias.

Los mtodos abstractos son mtodos con firmas, pero sin implementacin. Las subclases de esa clase
que contiene ese mtodo abstracto deben proporcionar su implementacin real.

Al igual que las clases abstractas, los mtodos abstractos le den la capacidad de dividir informacin
comn en una superclase general y luego reutilizar esa clase en formas diferentes.

Lo opuesto de abstracto es concreto: las clases concretes son clases que pueden ser instanciadas, y los
mtodos concretos son aquellos que tienen implementaciones reales.

Los mtodos abstractos son declarados con el modificador abstract, el cual va, por lo general,
despus de los modificadores de proteccin pero antes de static o final. Adems, no tienen cuerpo.

4 POLITECNICO
Los mtodos abstractos slo pueden existir dentro de clases abstractas, e incluso si se tiene una clase
llena de mtodos concretos con un solo mtodo abstracto, la clase completa debe ser abstracta.

La siguiente clase, llamada adecuadamente MiPrimeraClaseAbstracta, tiene una variable de


instancia y dos mtodos. Uno de estos mtodos, subclasesMeImplementan(), es abstracto. El otro,
hacerAlgo(), es concreto y tiene una definicin normal.

public abstract class MiPrimeraClaseAbstracta {


int unaVariableDeInstancia;

public abstract int subclasesMeImplementan(); // no hay definicin

public void hacerAlgo() {


... // un mtodo normal
}
}

La segunda clase es UnaSubclaseConcreta, que es una subclase de MiPrimeraClaseAbstracta.


Proporciona la implementacin de subclasesMeImplementan() y hereda el comportamiento restante
de MiPrimeraClaseAbstracta.

public class UnaSubclaseConcreta extends MiPrimeraClaseAbstracta {


public int subclasesMeImplementan() {
... // se *debe* implementer este mtodo aqu
}
}

Estos son algunos intentos de uso de estas clases:

Object a = new MiPrimeraClaseAbstracta(); // ilegal, es abstracta


Object c = new UnaSubclaseConcreta(); // OK, es una subclase concreta

El uso de una clase abstracta sin mtodos abstractos esto es, una que proporciona solamente una
plantilla para el comportamiento se logra mejor en Java mediante el uso de una interfaz.
Sin embargo, cada vez que un diseo pide una abstraccin que incluya el estado de la instancia y/o
una implementacin parcial, una clase abstracta es la nica alternativa.

POLITECNICO 5

Potrebbero piacerti anche