|
|||||||
|
|
|
|||||
|
|
|||||||
Un método abstracto es un método que declara una funcionalidad que debe ser implementada en todas las clases derivadas, en que se vaya a utilizar.
A través de un método tal, indicamos lo que deberían poder hacer los objetos de dichas
subclases .
Un método abstracto no se implementa en la clase base, sino que cada subclase debe tener su propia
implementación.
Caracteristicas en Java
* Una clase que tiene al menos un método abstracto, es una clase abstracta.
* Para declarar un método o una clase abstracta se usa la palabra abstract.
* Cuando en una clase derivada no se (re)define un método abstracto mediante una
implementación, el método continúa siendolo en la clase derivada.
* Se exige que todas las clases abstractas sean declaradas como tales.
* No se permite la creación de objetos de clases abstractas.
Ejemplo
Diseñaremos un clase con un método abstracto f(double x) que representa una función de paramétro x cualquiera. Vemos que por lógica esta función se debe implementar en alguna clase derivada para que tenga sentido.
Además de este método abstracto, implementamos un método llamado evaluar que llama al método f, retornando su valor.
abstract class Funcion
{
abstract public double f(double x);
public double evaluar(double x)
{
return f(x);
}
}
Con esto podemos comprobar que no se puede crear un objeto de una clase abstracta.
Ej :
Funcion func = new Funcion( );
double v = func.evaluar(0.6); /* error logico!! */
Ahora extenderemos la funcionalidad de clase abstracta Funcion creando la clase derivada FuncionExp que representa a la función exponencial.
En esta clase nos encargamos de implementar el método abstracto f.
class FuncionExp extends Funcion
{
public double f(double x)
{
return Math.exp(x);
}
}
Usando las características de herencia, se tiene el siguiente ejemplo :
Funcion fexp = new FuncionExp( );
System.out.println("e elevado a cero : " + fexp.evaluar(0.0) );
System.out.println("e elevado a uno : " + fexp.evaluar(1.0) );
System.out.println("e elevado a dos : " + fexp.evaluar(2.0) );
Al igual que la clase FuncionExp, creamos a continuación una clase que representa a una función lineal.
class FuncionLineal extends Funcion
{
private double pendiente;
private double xo,yo;
public FuncionLineal(double pendiente,double xo,double yo)
{
this.pendiente = pendiente;
this.xo = xo;
this.yo = yo;
}
public double f(double x)
{
return yo + pendiente*(x - xo);
}
}
Programa de prueba
class prbFunciones
{
public static void main(String arg[])
{
Funcion func = new FuncionExp();
System.out.println(func.evaluar(0));
System.out.println(func.evaluar(1));
Funcion flineal = new FuncionLineal(0.5,0.0,1.0);
System.out.println(flineal.evaluar(2.0));
FuncionExp fe = new FuncionExp();
System.out.println(fe.evaluar(2));
}
}
Bajar codigo