domingo, 26 de julio de 2009

SCJP Declaraciones Inicializacion y Alcance 1

Cuando escribimos código en java, lo que estamos escribiendo es justamente clases o interfaces, dentro de estas clases como conocemos pueden haber variables y métodos(y algunas otras cosas más), la forma en la que declaramos las clases, métodos y variables afecta en forma sustancial el comportamiento del código, por ejemplo un método público puede ser accedido desde código ejecutandose en cualquier lugar en tu aplicación, haciendo el método privado lo oculta a cualquier posible llamada(excepto a la clase en la cuál fué declarada).

Reglas de declaración de archivos fuente
  1. Solo puede haber una clase pública por archivo fuente.
  2. Los comentarios pueden aparecer al inicio o al fin de cualquier línea en el archivo de código fuente.
  3. Si es que hay una clase pública el nombre del archivo debe de coincidir con el nombre de la clase, por ejemplo si hay una clase declarada public Casa entonces el nombre del archivo deberá ser Casa.java
  4. Si la clase es parte de un paquete, la declaración del paquete debe ser la primera línea en el archivo de código fuente, antes de cualquier declaración de importacion import que pueda estar presente.
  5. Si hay declaraciones de importacion import, estas declaraciones deben de ir entre la declaración del paquete(si es que lo hubiera) y la declaración de la clase.
  6. Declaraciones de importación import y de paquetes package aplican a todas las clases dentro de un archivo de código fuente, en otras palabras, no hay manera para declarar multiples clases en un archivo y tenerlos en diferentes paquetes o usar diferentes importaciones.
  7. Un archivo puede tener más de una clase no pública.
  8. Archivos con clases no públicas pueden tener un nombre que no coincide con cualquiera de las clases en el archivo.
Declaraciones de clases y modificadores
  1. Modificadores de acceso: public, protected, private
  2. Modificadores de no-acceso: strictfp, final y abstract
Acceso de Clase
Que es lo que significa acceder a una clase?, cuando decimos que el código de una clase(class X) a accedido a otra clase(class Y) esto significa que la clase X puede hacer cualquiera de las 3 siguientes acciones:

Crear una instancia de la clase Y.
class X{
Y y = new Y( );
}

Extender la clase Y.
class X extends Y{ }

Accesar ciertos métodos y variables de la clase Y, dependiendo del control de acceso de estos métodos y variables.
class X{
Y y = new Y( );
X(){
y.holamundo();
}
}

Modificador de Acceso por Defecto.
Una clase con default access no tiene un modificador de acceso que le precede en su declaración, es decir tiene la forma class X{ } y no public class X { } este es el control de acceso que se obtiene cuando no escribimos el modificador en la declaración, las clases con default access pueden ser vistas como clases con nivel de acceso a nivel de paquete, porque una clase con default access puede ser vista solo por clases dentro del mismo paquete. Por ejemplo si tenemos una clase llamada Persona en el paquete miempresa.core declarada de la siguiente manera:

package miempresa.core;
class Persona{ }

y queremos usar la clase anterior pero en otro paquete digamos miempresa.rrhh con la clase Empleado extendiendola de la siguiente manera:

package miempresa.rrhh;
class Empleado extends Persona{ }

Al compilar la clase Persona no hay problema, pero cuando queremos compilar la clase Empleado entonces el compilador nos retorna un error diciendonos que no tiene acceso a la clase Persona esto es cierto porque el modificador de acceso de la clase Persona es por default, es decir no está indicado explicitamente(no está escrito) y por lo tanto solo puede ser visto por aquellas clases declaradas en el mismo paquete, es decir en el paquete miempresa.core, lo anterior se puede solucionar declarando la clase Empleado en el paquete miempresa.core ó declarando el modificador de acceso a public

Modificador de Acceso Público.
Una declaración de clase con la palabra clave public da a todas las clases de todos los paquetes acceso a esta clase pública, es decir en el ejemplo anterior si a la clase Persona la redeclaro como
public class Persona{ } entonces esta clase puede ser accedida desde cualquier clase en cualquier paquete desde mi aplicación. Ojo que si tratamos de usar la clase pública desde otro paquete entonces debemos de importar dicha clase con la palabra clave import

Otros Modificadores de Clase que no son de Acceso.
Podemos modificar la declaración de una clase con las palabras clave final y abstract

Clases Finales.
Cuando es usada en la declaración de una clase, la palabra clave final significa que la clase no puede ser extendida, en otras palabras ninguna clase puede heredar o extender una clase declarada final si intentamos hacerlo en compilador nos retornará un error.

Clases Abstractas.
Una clase abstracta no puede nunca ser instanciada, su único proposito es ser extendida.
Es decir si tenemos:
public abstract class Persona{ }
no podemos hacer esto:
Persona p = new Persona();
lo que debemos de hacer es lo siguiente:
public class Empleado extends Persona{ }

No hay comentarios.:

Publicar un comentario

Es bueno comunicarnos, comenta!!.