## Crear Subclases

Se declara que un clase es una subclase de otra clase dentro de La declaración de Clase. Por ejemplo, supongamos que queremos crear una subclase llamada SubClase de otra clase llamada SuperClase. Se escribiría esto:

    class SubClass extends SuperClass {
        . . .
    }

Esto declara que SubClase es una subclase de SuperClase. Y también declara implícitamene que SuperClase es la superclase de SubClase. Una subclase también hereda variables y miembros de las superclases de su superclase, y así a lo largo del árbol de la herencia. Para hacer esta explicación un poco más sencilla, cuando este tutorial se refiere a la superclase de una clase significa el ancestro más directo de la clase así como a todas sus clases ascendentes.

Una clase Java sólo puede tener una superclase directa. Java no soporta la herencia múltiple.

Crear una subclase puede ser tan sencillo como incluir la clausula extends en la declaración de la clase. Sin embargo, normalmente se deberá realizar alguna cosa más cuando se crea una subclase, como sobreescribir métodos, etc...

### ¿Qué variables miembro hereda una subclase?

> Regla: Una subclase hereda todas las variables miembros de su superclase que puedan ser accesibles desde la subclase (a menos que la variable miembro esté oculta en la subclase).

> Esto es, las subclases:
> - heredan aquellas variables miembros declaradas como public o protected
> - heredan aquellas variables miembros declaradas sin especificador de acceso (normalmente conocidas como "Amigas") siempre que la subclases esté en el mismo paquete que la clase
> - no hereda las variables miembros de la superclase si la subclase declara una variable miembro que utiliza el mismo nombre. La variable miembro de la subclase se dice que oculta a la variable miembro de la superclase.
> - no hereda las variables miembro private

### Ocultar Variables Miembro

> Como se mencionó en la sección anterior, las variables miembros definidas en la subclase ocultan las variables miembro que tienen el mismo nombre en la superclase.

> Como esta caracteristica del lenguaje Java es poderosa y conveniente, puede ser una fuente de errores: ocultar una variable miembro puede hacerse deliberadamente o por accidente. Entonces, cuando nombres tus variables miembro se cuidadoso y oculta sólo las variables miembro que realmente deseas ocultar.

> Una caracteristica interesante de las variables miembro en Java es que una clase puede acceder a una variable miembro oculta a través de su superclase. Considere este pareja de superclase y subclase:

>     class Super {
>         Number unNumero;
>     }
>     class Sub extends Super {
>         Float unNumero;
>     }

La variable unNumero de Sub oculta a la vairable unNumero de Super. Pero se puede acceder a la variable de la superclase utilizando:

    super.unNumero

super es una palabra clave del lenguaje Java que permite a un método referirse a las variables ocultas y métodos sobreescritos de una superclase.

### ¿Qué métodos hereda una Subclase?

> La regla que especifica los métodos heredados por una subclase es similar a la de las variables miembro.

> Regla: Una subclase hereda todos los métodos de sus superclase que son accesibles para la subclase (a menos que el método sea sobreescrito por la subclase).

> Esto es, una Subclase:
> - hereda aquellos métodos declarados como public o protected
> - hereda aquellos métodos sin especificador de acceso, siempre que la subclase esté en el mismo paquete que la clase
> - no hereda un método de la superclase si la subclase declara un método que utiliza el mismo nombre. Se dice que el método de la subclase sobreescribe al método de la superclase.
> - no hereda los métodos private

### Sobreescribir Métodos

> La habilidad de una subclase para sobreescribir un método de su superclase permite a una clase heredar de su superclase aquellos comportamientos "más cercanos" y luego suplementar o modificar el comportamiento de la superclase.

Ozito