Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web

Métodos y clases abstractas


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