Professional Documents
Culture Documents
Martín Vargas
Mendoza – Argentina
Feb. 2019
Conceptos:
Clase y Funciones Finales
Clases Abstractas
Interfaces
Diferencias entre Interfaces y Clases Abstractas
Clases finales
Se puede declarar una clase como final, cuando no nos interesa crear clases
derivadas de dicha clase. La clase Cuadrado se puede declarar como final, ya que
no se espera que ningún programador necesite crear clases derivadas de
Cuadrado.
Uno de los mecanismos que tienen los hackers para dañar o para obtener
información privada en los sistemas es la de crear una clase derivada y sustituir
dicha clase por la original. La clase derivada actúa exactamente igual que la original
pero también puede hacer otras cosas, normalmente dañinas. Para prevenir los
posibles daños, se declara la clase como final, impidiendo a cualquier programador
la creación de clases derivadas de ésta.
Por ejemplo, la clase String que es una de las más importantes en la programación
en lenguaje Java, está declarada como final. El lenguaje Java garatiza que siempre
que se utilice un string, es un objeto de la clase String que se encuentra en el
paquete java.lang.String, y no cualquier otro string.
Métodos finales
Como se ha comentado al introducir la herencia, una de las formas de aprovechar el código
existente, es la de crear una clase derivada y redefinir algunos de los métodos de la clase
base.
class Base {
final public void funcionFinal(){
// Se escribe lo necesario
}
public void dibujar(Graphics g){
}
}
class Derivada extends Base {
public void dibujar(Graphics g){
//dibujar algunas figuras
}
}
La clase Base define una función miembro pública dibujar, que no dibuja nada en el
contexto gráfico g. La clase Derivada redefine la función miembro dibujar, para dibujar
algunas figuras en el contexto grafico g. La función que se redefine tiene que tener la misma
declaración en la clase Base y en la clase Derivada.
Para evitar que las clase derivadas redefinan una función miembro de una clase base, se le
antepone la palabra clave final. La función miembro funcionFinal de la clase Base no se
puede redefinir en la clase Derivada, pero si se puede redefinir la función miembro dibujar.
Clases Abstractas
La idea de una clase abstracta es que hay que heredar necesariamente; en otro
caso no pueden ser utilizadas, justamente lo contrario de la de una clase final.
Definición: Una clase es abstracta cuando tiene algún método (o métodos) sin
definir. Por tanto no es posible declarar objetos de una clase abstracta. Serán las
clases derivadas las que completen esos métodos y de las que podremos definir
objetos.
Una clase abstracta sirve de base para otras clases, pero ella misma no puede ser
instanciada (declarar objetos de su tipo). Esto se hace porque la implementación
de alguno de los métodos depende de cada caso concreto y no se puede hacer en
general.
Clases Abstractas
PolígonoRegular.java
public abstract class PoligonoRegular {
La palabra clase abstract indica que
protected int numLados; la clase contiene métodos
protected double lado; // longitud de un lado abstractos, es decir métodos aún
public PoligonoRegular(int numLados, double lado) { no definidos. La clase está por
this.numLados = numLados; tanto, incompleta, y no podemos
this.lado = lado; declarar objetos de tipo
} PolígonoRegular:
Ahora bien, la diferencia es mucho más profunda y debemos tener en cuenta que a
diferencia de C , el lenguaje Java no tiene herencia múltiple.
Una clase solamente puede derivar (con extends) de una clase madre, pero puede
implementar varias interfaces. Los nombres de los interfaces se colocan separados
por una coma después de la palabra reservada implements.
El lenguaje Java no fuerza por tanto, una relación jerárquica, simplemente permite
que clases no relacionadas puedan tener algunas características de su
comportamiento similares.
Los interfaces y el polimorfismo
En el lenguaje Java solamente existe la herencia simple, pero las clases pueden
implementar interfaces. Vamos a ver en este apartado que la importancia de los
interfaces no estriba en resolver los problemas inherentes a la herencia múltiple
sin forzar relaciones jerárquicas, sino es el de incrementar el polimorfismo del
lenguaje más allá del que proporciona la herencia simple.
Herencia simple
Creamos una clase abstracta denominada Animal de la cual deriva las clases Gato
y Perro. Ambas clases redefinen la función habla declarada abstracta en la clase
base Animal.