Programación I 
Alexandra Pérez 
Lab. E6 
20/12/2012
Clases Abstractas 
 
 Un método abstracto es un método declarado en una 
clase para el cual esa clase no proporciona la 
implementación (el código). 
 Una clase abstracta es una clase que tiene al menos 
un método abstracto. 
 Una clase que extiende a una clase abstracta debe 
implementar los métodos abstractos (escribir el 
código) o bien volverlos a declarar como abstractos, 
con lo que ella misma se convierte también en clase 
abstracta.
 Presentan un nivel de "abstracción" tan elevado que no 
sirven para instanciar objetos de ellas. 
 
 Representan los escalones más elevados de algunas 
jerarquías de clases y solo sirven para derivar otras clases, 
en las que se van implementando detalles y concreciones, 
hasta que finalmente presentan un nivel de definición 
suficiente que permita instanciar objetos concretos. 
 Se suelen utilizar en aquellos casos en que se quiere que 
una serie de clases mantengan una cierta característica o 
interfaz común. Por esta razón a veces se dice de ellas que 
son pura interfaz.

Declaración e implementación de 
métodos abstractos 
 
abstract class FiguraGeometrica { 
. . . 
abstract void dibujar(); 
. . . 
} 
class Circulo extends FiguraGeometrica { 
. . . 
void dibujar() { 
// codigo para dibujar Circulo 
. . . 
} 
}
Declaración de clases abstractas 
Las clases abstractas se declaran empleando la palabra 
reservada abstract como se muestra a continuación: 
 public abstract class IdClase . . . 
 
Ejemplo: 
/** 
* Declaracion de la clase abstracta FiguraGeometrica 
* A. Garcia-Beltran - noviembre, 2005 
*/ 
public abstract class FiguraGeometrica { 
// Declaracion de atributos 
private String nombre; 
// Declaracion de metodos 
abstract public double area(); 
public figuraGeometrica (String nombreFigura ) { 
nombre = nombreFigura; 
} 
final public boolean mayorQue (FiguraGeometrica otra) { 
return area()>otra.area(); 
} 
final public String toString() { 
return nombre + " con area " + area(); 
} 
}
Reglas de uso: 
 
 Una clase abstracta solo puede ser usada como clase 
base para otras clases, pero no puede ser instanciada 
para crear un objeto. 
 Una clase abstracta no puede ser utilizada como 
argumento o como retorno de una función. 
 Si puede declararse punteros a clase abstracta . 
 Se permiten referencias a clase abstracta, suponiendo 
que el objeto temporal no es necesario en la 
inicialización.
Referencias y objetos abstractos 
Se pueden crear referencias a clases abstractas como cualquier otra: 
 
FiguraGeometrica figura; 
Sin embargo una clase abstracta no se puede instanciar, es decir, no se 
pueden crear objetos de una clase abstracta. El compilador producirá un 
error si se intenta: 
FiguraGeometrica figura = new FiguraGeometrica(); 
Esto es coherente dado que una clase abstracta no tiene completa su 
implementación y encaja bien con la idea de que algo abstracto no 
puede materializarse. 
Sin embargo: 
FiguraGeometrica figura = new Circulo(. . .); 
figura.dibujar(); 
La invocación al método dibujarse resolverá en tiempo de ejecución y la 
JVM llamará al método de la clase adecuada.
Ejemplo clase abstracta 
public abstract class Figura {  
int x, y; 
public void mostrarOrigen() { 
System.out.println("x= "+x+" y= "+y);} 
public abstract double area(); // No tiene implementación 
public abstract double mostrarNombre(); 
} 
public class Triangulo extends Figura { 
protected int base, altura; 
public Triangulo (int ba, int al) { base=ba; altura=al; } 
public double area() { return base*altura/2; } 
public void mostrarNombre() { System.out.println(“triangulo”); } 
} 
public class Cuadrado extends Figura { 
protected int lado; 
public Cuadrado (int lado) { this.lado=lado; } 
public double area() { return lado*lado; } 
public void mostrarNombre() { System.out.println(“cuadrado”);}}
 Prueba clase abstracta 
public class PruebaClaseAbstracta { 
public static void main(String args[]) { 
Figura fig; 
Triangulo tri; 
 
Cuadrado cua; 
fig = new Figura(); // error no se puede 
//instanciar una clase abstracta 
tri = new Triangulo(4,3); 
tri.mostrarOrigen(); 
tri.mostrarNombre(); 
fig = tri; 
fig.mostrarNombre(); 
System.out.println("Area triangulo: "+fig.area()); 
cua = new Cuadrado(5); 
fig = cua; 
System.out.println("Area cuadrado: "+fig.area()); 
} 
}
Interfaces 
 
 Una interfaz en java es un conjunto de métodos 
abstractos y propiedades. En ellas se especifica qué 
se debe hacer pero no su implementación. Serán las 
clases que implementen estas interfaces las que 
describan la lógica del comportamiento de los 
métodos.
Ventajas al utilizar interfaces 
 
 Se organiza la programación. 
 Obligar a que ciertas clases utilicen los mismos 
métodos (nombres y parámetros). 
 Establecer relaciones entre clases que no estén 
relacionadas.
Declaración de interfaces 
 
interface NombreInterfaz { 
tipo static final NOMBRECONSTANTE1 = valor; 
…….….…. 
public tipoDevuelto nombreMetodo1(listaParámetros); 
…….….…. 
} 
class NombreClase implements NombreInterfaz1 
[, NombreInterfaz2 ..] { 
// declaración atributos y métodos de la clase 
…….….…. 
}

Extensión de interfaces 
 
 Se puede definir un interface que especialice a otro 
interface mediante extends similar a herencia. 
 Un interface puede extender a varios interfaces a la vez. 
interface ElementoOrdenado extends 
Comparable, Cloneable, java.io.Serializable { 
// miembros y métodos propios del interfaz 
//ElementoOrdenado 
..... 
}
 
Ejemplo: 
public interface Nombrable { 
static final boolean CIERTO = true; 
public void mostrarNombre(); 
} 
public class Elemento implements Nombrable { 
String nombre; 
public Elemento(String nom) { 
nombre = nom; } 
// obligatorio implementar método mostrarNombre 
public void mostrarNombre(){ 
System.out.println("Nombre: "+nombre); 
if (CIERTO) 
System.out.println("Constante CIERTO "); 
}}
 
Net grafía: 
 http://gl-epn-programacion-ii. 
blogspot.com/2010/04/interfaces-en-java.html 
 http://www.fdi.ucm.es/profesor/lgarmend/arcgisjava/temas 
/Tema%209%20Clases%20abstractas 
 http://ocw.upm.es/lenguajes-y-sistemas-informaticos/ 
programacion-en-java-i/ 
Contenidos/LecturaObligatoria/16-herencia.pdf 
%20e%20interfaces.pdf 
 http://www.slideshare.net/networksens/09-clases-abstractas-e- 
interfaces 
 http://www.zator.com/Cpp/E4_11_8c.htm 
 http://www.arrakis.es/~abelp/ApuntesJava/ClasesAbstractas 
.htm

Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02

  • 1.
    Programación I AlexandraPérez Lab. E6 20/12/2012
  • 2.
    Clases Abstractas   Un método abstracto es un método declarado en una clase para el cual esa clase no proporciona la implementación (el código).  Una clase abstracta es una clase que tiene al menos un método abstracto.  Una clase que extiende a una clase abstracta debe implementar los métodos abstractos (escribir el código) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte también en clase abstracta.
  • 3.
     Presentan unnivel de "abstracción" tan elevado que no sirven para instanciar objetos de ellas.   Representan los escalones más elevados de algunas jerarquías de clases y solo sirven para derivar otras clases, en las que se van implementando detalles y concreciones, hasta que finalmente presentan un nivel de definición suficiente que permita instanciar objetos concretos.  Se suelen utilizar en aquellos casos en que se quiere que una serie de clases mantengan una cierta característica o interfaz común. Por esta razón a veces se dice de ellas que son pura interfaz.
  • 4.
  • 5.
    Declaración e implementaciónde métodos abstractos  abstract class FiguraGeometrica { . . . abstract void dibujar(); . . . } class Circulo extends FiguraGeometrica { . . . void dibujar() { // codigo para dibujar Circulo . . . } }
  • 6.
    Declaración de clasesabstractas Las clases abstractas se declaran empleando la palabra reservada abstract como se muestra a continuación:  public abstract class IdClase . . .  Ejemplo: /** * Declaracion de la clase abstracta FiguraGeometrica * A. Garcia-Beltran - noviembre, 2005 */ public abstract class FiguraGeometrica { // Declaracion de atributos private String nombre; // Declaracion de metodos abstract public double area(); public figuraGeometrica (String nombreFigura ) { nombre = nombreFigura; } final public boolean mayorQue (FiguraGeometrica otra) { return area()>otra.area(); } final public String toString() { return nombre + " con area " + area(); } }
  • 7.
    Reglas de uso:   Una clase abstracta solo puede ser usada como clase base para otras clases, pero no puede ser instanciada para crear un objeto.  Una clase abstracta no puede ser utilizada como argumento o como retorno de una función.  Si puede declararse punteros a clase abstracta .  Se permiten referencias a clase abstracta, suponiendo que el objeto temporal no es necesario en la inicialización.
  • 8.
    Referencias y objetosabstractos Se pueden crear referencias a clases abstractas como cualquier otra:  FiguraGeometrica figura; Sin embargo una clase abstracta no se puede instanciar, es decir, no se pueden crear objetos de una clase abstracta. El compilador producirá un error si se intenta: FiguraGeometrica figura = new FiguraGeometrica(); Esto es coherente dado que una clase abstracta no tiene completa su implementación y encaja bien con la idea de que algo abstracto no puede materializarse. Sin embargo: FiguraGeometrica figura = new Circulo(. . .); figura.dibujar(); La invocación al método dibujarse resolverá en tiempo de ejecución y la JVM llamará al método de la clase adecuada.
  • 9.
    Ejemplo clase abstracta public abstract class Figura {  int x, y; public void mostrarOrigen() { System.out.println("x= "+x+" y= "+y);} public abstract double area(); // No tiene implementación public abstract double mostrarNombre(); } public class Triangulo extends Figura { protected int base, altura; public Triangulo (int ba, int al) { base=ba; altura=al; } public double area() { return base*altura/2; } public void mostrarNombre() { System.out.println(“triangulo”); } } public class Cuadrado extends Figura { protected int lado; public Cuadrado (int lado) { this.lado=lado; } public double area() { return lado*lado; } public void mostrarNombre() { System.out.println(“cuadrado”);}}
  • 10.
     Prueba claseabstracta public class PruebaClaseAbstracta { public static void main(String args[]) { Figura fig; Triangulo tri;  Cuadrado cua; fig = new Figura(); // error no se puede //instanciar una clase abstracta tri = new Triangulo(4,3); tri.mostrarOrigen(); tri.mostrarNombre(); fig = tri; fig.mostrarNombre(); System.out.println("Area triangulo: "+fig.area()); cua = new Cuadrado(5); fig = cua; System.out.println("Area cuadrado: "+fig.area()); } }
  • 11.
    Interfaces  Una interfaz en java es un conjunto de métodos abstractos y propiedades. En ellas se especifica qué se debe hacer pero no su implementación. Serán las clases que implementen estas interfaces las que describan la lógica del comportamiento de los métodos.
  • 12.
    Ventajas al utilizarinterfaces   Se organiza la programación.  Obligar a que ciertas clases utilicen los mismos métodos (nombres y parámetros).  Establecer relaciones entre clases que no estén relacionadas.
  • 13.
    Declaración de interfaces  interface NombreInterfaz { tipo static final NOMBRECONSTANTE1 = valor; …….….…. public tipoDevuelto nombreMetodo1(listaParámetros); …….….…. } class NombreClase implements NombreInterfaz1 [, NombreInterfaz2 ..] { // declaración atributos y métodos de la clase …….….…. }
  • 14.
  • 15.
    Extensión de interfaces   Se puede definir un interface que especialice a otro interface mediante extends similar a herencia.  Un interface puede extender a varios interfaces a la vez. interface ElementoOrdenado extends Comparable, Cloneable, java.io.Serializable { // miembros y métodos propios del interfaz //ElementoOrdenado ..... }
  • 16.
     Ejemplo: publicinterface Nombrable { static final boolean CIERTO = true; public void mostrarNombre(); } public class Elemento implements Nombrable { String nombre; public Elemento(String nom) { nombre = nom; } // obligatorio implementar método mostrarNombre public void mostrarNombre(){ System.out.println("Nombre: "+nombre); if (CIERTO) System.out.println("Constante CIERTO "); }}
  • 17.
     Net grafía:  http://gl-epn-programacion-ii. blogspot.com/2010/04/interfaces-en-java.html  http://www.fdi.ucm.es/profesor/lgarmend/arcgisjava/temas /Tema%209%20Clases%20abstractas  http://ocw.upm.es/lenguajes-y-sistemas-informaticos/ programacion-en-java-i/ Contenidos/LecturaObligatoria/16-herencia.pdf %20e%20interfaces.pdf  http://www.slideshare.net/networksens/09-clases-abstractas-e- interfaces  http://www.zator.com/Cpp/E4_11_8c.htm  http://www.arrakis.es/~abelp/ApuntesJava/ClasesAbstractas .htm