Cargando...
Blogger Draft | Edicion Entradas | Configuración | Diseño | Edición HTML | quickEdit OFF | quickEdit ON

miércoles, 16 de septiembre de 2009

Declarar Clases

0
Ahora que ya sabemos como crear, utilizar y destruir objetos, es hora de aprender cómo escribir clasesde las que crear esos objetos.
Una clase es un proyecto o prototipo que se puede utilizar para crear muchos objetos. La implementación de una clase comprende dos componentes: la declaración y el cuerpo de la clase:
DeclaraciónDeLaClase {
CuerpoDeLaClase
}
La Declaración de la Clase
Como mínimo, la declaración de una clase debe contener la palabra clave class y el nombre de
la clase que está definiendo. Así la declaración más sencilla de una clase se parecería a esto:
class NombredeClase {
. . .
}
Por ejemplo, esta clase declara una nueva clase llamada NumeroImaginario:
class NumeroImaginario {
. . .
}
Los nombres de las clases deben ser un identificador legal de Java y, por convención, deben
empezar por una letra mayúscula. Muchas veces, todo lo que se necesitará será una
declaración mínima. Sin embargo, la declaración de una clase puede decir más cosas sobre la
clase. Más especificamente, dentro de la declaración de la clase se puede:
l declarar cual es la superclase de la clase.
l listar los interfaces implementados por la clase
l declarar si la clase es pública, abstracta o final
Declarar la Superclase de la Clase
En Java, todas las clases tienen una superclase. Si no se especifica una superclase para una
clase, se asume que es la clase Object (declarada en java.lang). Entonces la superclase de
NumeroImaginario es Object porque la declaración no explicitó ninguna otra clase. Para
obtener más información sobre la clase Object, puede ver La clase Object.
Para especificar explícitamente la superclase de una clase, se debe poner la palabra clave
extends más el nombre de la superclase entre el nombre de la clase que se ha creado y el
corchete abierto que abre el cuerpo de la clase, así:
class NombredeClase extends NombredeSuperClase {
. . .
}
Por ejemplo, supon que quieres que la superclase de NumeroImaginario sea la clase Number
en vez de la clase Object. Se podróa escribir esto:
class NumeroImaginario extends Number {
. . .
}
Esto declara explícitamente que la clase Number es la superclase de NumeroImaginario. (La
clase Number es parte del paquete java.lang y es la base para los enteros, los números en
coma flotante y otros números).
Declarar que Number es la superclase de NumeroImaginario declara implícitamente que
NumeroImaginario es una subclase de Number. Una subclase hereda las variables y los
métodos de su superclase.
Crear una subclase puede ser tan sencillo como incluir la clausula extends en su declaración
de clase. Sin embargo, se tendrán que hacer otras provisiones en su código cuando se crea una
subclase, como sobreescribir métodos. Para obtener más información sobre la creacción de
subclases, puede ver Subclases, Superclases, y Herencia.
Listar los Interfaces Implementados por la Clase
Cuando se declara una clase, se puede especificar que interface, si lo hay, está implementado
por la clase. Pero, ¿Qué es un interface? Un interface declara un conjunto de métodos y
constantes sin especificar su implementación para ningún método. Cuando una clase exige la
implementación de un interface, debe proporcionar la implementación para todos los métodos
declarados en el interface.
Para declarar que una clase implementa uno o más interfaces, se debe utilizar la palabra clave
implements seguida por una lista de los interfaces implementados por la clase delimitada por
comas. Por ejemplo, imagina un interface llamado Aritmetico que define los métodos llamados
suma(), resta(), etc... La clase NumeroImaginario puede declarar que implementa el
interface Aritmetico de esta forma:
class NumeroImaginario extends Number implements Aritmetico {
. . .
}
se debe garantizar que propociona la implementación para los métodos suma(), resta() y
demás métodos declarados en el interface Aritmetico. Si en NumeroImaginario falta alguna
implementación de los métodos definidos en Aritmetico, el compilador mostrará un mensaje de
error y no compilará el programa:
nothing.java:5: class NumeroImaginario must be declared abstract. It does not define
java.lang.Number add(java.lang.Number, java.lang.Number) from interface Aritmetico.
class NumeroImaginario extends Number implements Aritmetico {
^
Por convención, la clausula implements sigue a la clausula extends si ésta existe.
Observa que las firmas de los métodos declarados en el interface Aritmetico deben
corresponder con las firmas de los métodos implementados en la clase NumeroImaginario.
Tienes más información sobre cómo crear y utilizar interfaces en Crear y Utilizar Interfaces.
Clases Public, Abstract, y Final
Se puede utilizar uno de estos tres modificadores en una declaración de clase para declarar que
esa clase es pública, abstracta o final. Los modificadores van delante de la palabra clave class
y son opcionales.
El modificador public declara que la clase puede ser utilizada por objetos que estén fuera del
paquete actual. Por defecto, una clase sólo puede ser utiliza por otras clases del mismo
paquete en el que están declaradas.
public class NumeroImaginario extends Number implements Aritmetico {
. . .
}
Por convención, cuando se utiliza la palabra public en una declaración de clase debemos
asegurarnos de que es el primer item de la declaración.
El modificador abstract declara que la clase es una clase abstracta. Una clase abstracta podría
contener métodos abstractos (métodos sin implementación). Una clase abstracta está diseñada
para ser una superclase y no puede ejemplarizarse. Para una discusión sobre las clases
abstractas y cómo escribirlas puedes ver Escribir Clases y Métodos Abstractos.
Utilizando el modificador final se puede declarar que una clase es final, que no puede tener
subclases. Existen (al menos) dos razones por las que se podría querer hacer esto: razones de
seguridad y razones de diseño. Para un mejor explicaión sobre las clases finales puedes ver
Escribir Clases y Métodos Finales.
Observa que no tiene sentido para una clase ser abstracta y final. En otras palabras, una clase
que contenga métodos no implementados no puede ser final. Intentar declarar una clase como
final y abstracta resultará en un error en tiempo de compilación.
Sumario de la Daclaración de una Clase
En suma, una declaración de clase se parecería a esto:
[ modificadores ] class NombredeClase [ extends NombredeSuperclase ]
[ implements NombredeInterface ] {
. . .
}
Los puntos entre [ y ] son opcionales. Una declaración de clase define los siguientes aspectos
de una clase:
l modificadores declaran si la clase es abstracta, pública o final.
l NombredeClase selecciona el nombre de la clase que está declarando
l NombredeSuperClase es el nombre de la superclase de NombredeClase
NombredeInterface es una lista delimitada por comas de los interfaces implementados
por NombredeClase
l
De todos estos items, sólo la palabra clave class y el nombre de la clase son necesarios. Los
otros son opcionales. Si no se realiza ninguna declaración explícita para los items opcionales, el
compilador Java asume ciertos valores por defecto (una subclase de Object no final, no pública,
no obstracta y que no implementa interfaces).

0 comentarios:

COMENTA, QUE ES GRATIS...

 
arriba
free counters
Ir Arriba