Você está na página 1de 4

Clases abstractas Clases abstractas e interfaces

Clases cuya descripcin es incompleta. Una clase abstracta declara mtodos, pero no tiene que implementarlos.

No proporcionan la implementacin de todos sus mtodos Los mtodos no implementados se declaran como abstract Una clase con un mtodo abstracto debe declararse como clase abstracta Pero una clase puede declararse como abstracta aunque no tenga ningn mtodo abstracto

Tema 9. Clases abstractas e interfaces. LPS 2005.

Tema 9. Clases abstractas e interfaces. LPS 2005.

Clases abstractas
Forma xpos ypos color ... dibuja setColor ...
{abstract}

Clases abstractas
public abstract class Forma { private int xpos, ypos; private Color color; // ... public abstract void dibuja(); public void setColor(Color c){ /*...*/ }; } public class Circle extends Forma{ private int radio; // ... public void dibuja(){ /*...*/ }; public void setRadio(int){/*...*/}; } public class Rectangle extends Forma{ private int altura, anchura; // ... public void dibuja(){ /*...*/ }; public void setAltura(int){/*...*/}; }
3

los mtodos abstactos no tienen cuerpo dibuja un crculo

Otras
Circulo radio ... setRadio ... Rectangulo altura anchura ... setAltura ...

dibuja un rectngulo

Tema 9. Clases abstractas e interfaces. LPS 2005.

Tema 9. Clases abstractas e interfaces. LPS 2005.

Clases abstractas

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 implementacin Triangulo public abstract double mostrarNombre(); } Cuadrado 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 voidTema mostrarNombre() { System.out.println(cuadrado);}} 9. Clases abstractas e

Las subclases de una clase abstracta deben: Sobreescribir todos los mtodos abstractos de la superclase, o bien Ser declaradas como clases abstractas Una clase abstracta no puede instanciarse No se pueden crear objetos de una clase abstracta Una clase abstracta puede incluir variables y mtodos no abstractos. No se pueden definir constructores abstractos o mtodos estticos abstractos.

Figura

Tema 9. Clases abstractas e interfaces. LPS 2005.

interfaces. LPS 2005.

Prueba clase abstracta


public class class PruebaClaseAbstracta PruebaClaseAbstracta { { public public static static void void main(String main(String args[]) args[]) { { public Figura fig; fig; Figura Triangulo tri; Triangulo tri; Cuadrado cua; cua; Cuadrado fig = = new new Figura(); Figura(); // // error error no no se se puede puede fig //instanciar una una clase clase abstracta abstracta //instanciar tri = = new new Triangulo(4,3); Triangulo(4,3); tri tri.mostrarOrigen(); tri.mostrarOrigen(); tri.mostrarNombre(); tri.mostrarNombre(); fig = = tri; tri; fig fig.mostrarNombre(); fig.mostrarNombre(); System.out.println("Area triangulo: triangulo: "+fig.area()); "+fig.area()); System.out.println("Area cua = = new new Cuadrado(5); Cuadrado(5); cua fig = = cua; cua; fig System.out.println("Area cuadrado: cuadrado: "+fig.area()); "+fig.area()); System.out.println("Area
Tema 9. Clases abstractas e interfaces. LPS 2005. 7

Interfaces
Slo declaran comportamiento

Se utiliza la palabra clave interface Por defecto todos sus mtodos son pblicos y abstractos
No implementan el comportamiento

Por defecto todos sus atributos son pblicos, constantes y de clase


Por legibilidad normalmente los declaramos static y final
Tema 9. Clases abstractas e interfaces. LPS 2005.

} }

} }

Interfaces
Permite simular algunos aspectos de la herencia mltiple

Declaracin de interfaces
Sintaxis
interface NombreInterfaz NombreInterfaz { { interface tipo static static final final NOMBRECONSTANTE1 NOMBRECONSTANTE1 = = valor; valor; tipo ... ... public tipoDevuelto nombreMetodo1(listaParmetros); public tipoDevuelto nombreMetodo1(listaParmetros); ... ... } } class NombreClase implements implements NombreInterfaz1 class NombreClase NombreInterfaz1 Implementacin del interfaz en una clase [, NombreInterfaz2 NombreInterfaz2 ..] ..] { { [, // declaracin atributos y mtodos de la clase clase Una clase puede implementar varios interfaces // declaracin atributos y mtodos de la ... ... } }
9 Tema 9. Clases abstractas e interfaces. LPS 2005. 10

Define un tipo de datos Posibilita el enlace dinmico Cualquier clase que implemente un interfaz debe definir todos los mtodos de dicho interfaz
Debe proporcionar la implementacin de dichos mtodos

Otras clases pueden implementar un interfaz

Si la clase no proporciona la implementacin para todos los mtodos del interfaz debe ser declarada como abstracta
Tema 9. Clases abstractas e interfaces. LPS 2005.

interfaces
Programador es un Asalariado

Ejemplo de interfaz
public interface interface Nombrable Nombrable { { public static final final boolean boolean CIERTO CIERTO = = true; true; static public void void mostrarNombre(); mostrarNombre(); public } } public class class Elemento Elemento implements implements Nombrable Nombrable { { public String nombre; nombre; String public Elemento(String Elemento(String nom) nom) { { public nombre = = nom; nom; } } nombre // obligatorio obligatorio implementar implementar mtodo mtodo mostrarNombre mostrarNombre // public void void mostrarNombre(){ mostrarNombre(){ public System.out.println("Nombre: "+nombre); "+nombre); System.out.println("Nombre: if (CIERTO) (CIERTO) if System.out.println("Constante CIERTO "); "); System.out.println("Constante CIERTO Tema 9. Clases abstractas e interfaces. LPS 2005. 12 }} }}

Asalariado implements Empelado extends Programador


Payable p = new Programmer();

ite rm pe e s

Tema 9. Clases abstractas e interfaces. LPS 2005.

11

Uso del interfaz con enlace dinmico


public class class PruebaInterfaz PruebaInterfaz { { public public static static void void main(String main(String args[]) args[]) { { public Elemento elem; elem; Elemento Nombrable inter; inter; Nombrable elem = = new new Elemento(Luis"); Elemento(Luis"); elem elem.mostrarNombre(); elem.mostrarNombre(); // una una referencia referencia a a interfaz interfaz puede puede // //utilizarse con con una una instancia instancia de de //utilizarse // una una clase clase que que lo lo implemente implemente // inter = = elem; elem; inter inter.mostrarNombre(); } inter.mostrarNombre(); } Tema 9. Clases abstractas e
interfaces. LPS 2005. 13

Ejemplo de interfaces
{interface}
Humano Actor Canino

Persona Person ... actua() act() ...

Perro ... actua() ...

} }

Tema 9. Clases abstractas e interfaces. LPS 2005.

14

Ejemplo de interfaces
interface Actor { void actua(); }

Extensin de interfaces
Se puede definir un interface que especialice a otro interface mediante

sin cuerpo

extends
public class Persona extends Humaon implements Actor { public void actua(){ /*...*/}; //... } public class Perro extends Canino implements Actor { public void actua(){ /*...*/}; //... } Tema 9. Clases abstractas e
interfaces. LPS 2005.

Es similar a la herencia de clases

15

Tema 9. Clases abstractas e interfaces. LPS 2005.

16

Extensin de interfaces
No obstante un interface puede extender a varios interfaces a la vez

Rsumen de interfaces
Las interfaces sirven para:

Aqu la herencia mltiple no plantea problemas porque no se hereda cdigo

interface ElementoOrdenado ElementoOrdenado extends extends interface Comparable, Cloneable, Cloneable, java.io.Serializable java.io.Serializable { { Comparable, // miembros miembros y y mtodos mtodos propios propios del del interfaz interfaz // //ElementoOrdenado //ElementoOrdenado ..... ..... } }
Tema 9. Clases abstractas e interfaces. LPS 2005. 17

Declarar mtodos que sern implementados por una o ms clases. Determinar la interface de programacin de un objeto, sin mostrar el cuerpo de la clase. Capturar similitudes entre clases no relacionadas, sin forzar una relacin entre ellas. Describir objetos "tipo-funcin", que podrn ser utilizados como argumentos al invocar mtodos sobre objetos.
Tema 9. Clases abstractas e interfaces. LPS 2005. 18

Rsumen de interfaces
Tipo herencia instanciable implementa datos

Class extends (simple) yes metodos Se permiten

Abstract Class extends (simple) no algn mtodo Se permiten

Interface implements (multiple) no nada no se permiten

Tema 9. Clases abstractas e interfaces. LPS 2005.

19

Você também pode gostar