Вы находитесь на странице: 1из 4

Declaraciones de clases:

Cuando escribimos cdigo Java escribimos clases o interfaces, dentro de estas escribimos las variables y mtodos. La forma en la que declaremos las clases, variables y mtodos tiene implicaciones en el comportamiento de nuestro cdigo, por ejemplo, cuando declaramos una clase como public (pblico) esta clase puede ser accedida o vista desde cualquier clase dentro de nuestra aplicacin. Reglas de declaracin de archivos de cdigo fuente:

Slo debe haber una clase declarada pblica dentro de un archivo de cdigo. Los comentarios pueden ir en cualquier lnea del cdigo. Si tenemos una clase declarada pblica en un archivo, el nombre del archivo debe ser el mismo de la clase pblica, por ejemplo, para la clase "public class Empleado" el archivo debe tener el nombre "Empleado.java". Si la clase forma parte de un paquete, la declaracin de este paquete debe ir primero antes que la declaracin de la clase. Si no se manejan paquetes y se importan clases, con la palabra reservada "import" (importaciones), estos "import" debe declararse antes que la clase. Si no se tienen ni paquetes ni importaciones la declaracin de la clase debe aparecer en la primera lnea (aunque pueden ir comentarios antes de esta). Las importaciones y los paquetes se aplican para todas las clases declaradas en un archivo, no hay forma de que declares mltiples clases en un archivo y pertenezcan a diferentes paquetes o usen diferentes importaciones. Un archivo puede tener ms de una clase no pblica.

Declaracin de clases y modificadores


Los modificadores se dividen en dos categoras:

Modificadores de acceso: public, private, protected. Modificadores de no acceso: algunos como final, static, abstract, etc.

Primero debemos de tener en mente que con los modificadores de acceso podemos establecer si una clase puede ser accedida o no por un determinado recurso. Existen 4 niveles de acceso pero 3 modificadores de acceso. El cuarto nivel de acceso de control es el usado por defecto, que se establece cuando no declaramos ningn modificador de acceso a nuestra clase, es decir, todas las clases, variables y mtodos cuentan con un control de acceso. Los cuatro niveles de acceso funcionan para las variables y mtodos pero una clase solo puede ser declarada pblica o por defecto.

Acceso a las clases:


Cuando decimos que una clase "A" tiene acceso a una clase "B", esto significa 3 cosas: Que la clase "A" puede crear una instancia de la clase "B". La clase "A" extiende de la clase "B", es decir es una sub clase de la clase "B". La clase "A" puede acceder a ciertos mtodos y variables de la clase "B", dependiendo de las controles de acceso que tengas estos en la clase "B".

Acceso por defecto o default:


Una clase con acceso por defecto es la que no tiene ningn modificador de acceso en su declaracin. Pensemos en el acceso por defecto como un nivel de acceso de paquete, es decir, una clase con acceso por defecto solo puede ser accedida desde otra clase en el mismo paquete. Por ejemplo si tenemos dos clases "A" y "B", que estn en diferentes paquetes y ambas tienen el nivel acceso por defecto (es decir, no tienen declarado ningn modificador de acceso), la clase "B" no puede crear una instancia de la clase "A" (ya que no puede verla), y la clase "A" ni siquiera sabe que la clase "B" existe (ya que tampoco puede verla). Por ejemplo, si tenemos las siguientes clases: package autos; class Toyota{ }

en

un

segundo

archivo

tenemos:

package aviones; import autos.Toyota; public class Boing extend Toyota { } Como podemos, ver la clase "Toyota" y la clase "Boing" se encuentran en diferentes paquetes. La importacin en la parte superior de clase "Boing" est tratando de importar a la clase "Toyota", la clase "Toyota" compila bien, pero cuando tratamos de compilar la clase "Boing" tendremos un error como este: Can't access class autos.Toyota Class or interface must be public, in same package, or an accessible member class. import autos.Toyota; La clase "Boing" no puede acceder a la clase "Toyota", ya que esta clase esta con el nivel de acceso por defecto y se encuentran en diferentes paquetes. Para lograr nuestro cometido podemos realizar 2 cosas: incluir a las dos clases en el mismo paquete o declarar a la clase "Toyota" como pblica.

Acceso pblico:
Una clase declarada como pblica puede ser accedida desde cualquier lugar de nuestra aplicacin. No debemos olvidar que para poder acceder a una clase publica desde otro paquete tenemos que importar esta clase pblica.

Otros modificadores o modificadores de no acceso (Non Access Modifiers):


Los modificadores de no acceso (non access modifiers) sirven para un propsito distinto al de los modificadores de acceso, sirven para lograr diferentes funcionalidades, en resumen y para mencionar algunos explicaremos primero brevemente algunos de los modificadores de no acceso para dar una idea un poco ms claro de estos: El modificador static se aplica a los mtodos de clase y las variables para convertirlos en mtodos o variables de clases, y no de instancia. El modificador final se aplica a las clases, mtodos y variables para evitar que sean extendidos, sobre escritos o cambiados (en resumen modificados de alguna forma). El modificador abstract para crear clases y mtodos abstractos.

Como podemos ver algunos modificadores solo se pueden aplicar a mtodos y clases otros a clases, mtodos y variables, todo esto lo veremos a continuacin. Una clase puede final abstract strictfp tener slo los siguientes modificadores de no acceso:

Estos modificadores son adicionales a los modificadores de acceso y podemos usarlos en combinacin con estos. Podemos, por ejemplo, declarar una clase como "public final". Sin embargo no siempre podemos combinar estos los modificadores de no acceso, como por ejemplo nunca debemos declarar una clase "abstract final".

Clases declaradas con el modificador final:


Una clase declarada con el modificador "final" significa que no se pueden crear subclases a partir de ella. Un ejemplo de una clase declarada "final" es cuando queramos tener la absoluta garanta que los mtodos y variables de esta clase no puedan ser sobre escritos por otra clase. Una de las ventajas de tener clases no "final" es este escenario: imaginen que encontramos un problema con un mtodo en una clase que estamos utilizando, pero no tenemos el cdigo fuente, as que no podemos modificar el cdigo fuente para mejorar el mtodo. Pero se puede extender la clase y reemplazar el mtodo en su nueva subclase, y sustituir en todas partes la superclase original. Si la clase es "final", sin embargo, entonces estamos perdidos.

Modificaremos package autos;

nuestro

ejemplo

anterior:

public final class Toyota{ } Si ahora intentamos extender la clase "Toyota", que est marcada como "final", con la siguiente clase que tenemos en un segundo archivo: package aviones; import autos.Toyota; public class Boing extend Toyota { } Obtendremos un error como el siguiente

Can't subclass final classes: class autos.Toyota class Boing extends Toyota{ 1 error Tenemos este error ya que la clase "Toyota" tiene el modificador "final" (no puede tener subclases) y aun as la clase "Boing" est tratando de extenderla.

Вам также может понравиться