Está en la 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
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.

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 9. Clases abstractas e mostrarNombre() { System.out.println(cuadrado);}}

Figura

Tema 9. Clases abstractas e interfaces. LPS 2005.

interfaces. LPS 2005.

Prueba clase abstracta


public class PruebaClaseAbstracta { public class PruebaClaseAbstracta { public static void main(String args[]) { public static void main(String args[]) { Figura fig; Figura fig; Triangulo tri; Triangulo tri; Cuadrado cua; Cuadrado cua; fig = new Figura(); // error no se puede fig = new Figura(); // error no se puede //instanciar una clase abstracta //instanciar una clase abstracta tri = new Triangulo(4,3); tri = new Triangulo(4,3); tri.mostrarOrigen(); tri.mostrarOrigen(); tri.mostrarNombre(); tri.mostrarNombre(); fig = tri; fig = tri; fig.mostrarNombre(); fig.mostrarNombre(); System.out.println("Area triangulo: "+fig.area()); System.out.println("Area triangulo: "+fig.area()); cua = new Cuadrado(5); cua = new Cuadrado(5); fig = cua; fig = cua; System.out.println("Area cuadrado: "+fig.area()); System.out.println("Area cuadrado: "+fig.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. 8

} }

} }

Interfaces
Permite simular algunos aspectos de la herencia mltiple
Define un tipo de datos Posibilita el enlace dinmico

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

Otras clases pueden implementar un interfaz


Cualquier clase que implemente un interfaz debe definir todos los mtodos de dicho interfaz
Debe proporcionar la implementacin de dichos mtodos

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 Nombrable { public interface Nombrable { static final boolean CIERTO = true; static final boolean CIERTO = true; public void mostrarNombre(); public void mostrarNombre(); } } public class Elemento implements Nombrable { public class Elemento implements Nombrable { String nombre; String nombre; public Elemento(String nom) { public Elemento(String nom) { nombre = nom; } nombre = nom; } // obligatorio implementar mtodo mostrarNombre // obligatorio implementar mtodo mostrarNombre public void mostrarNombre(){ public void mostrarNombre(){ System.out.println("Nombre: "+nombre); System.out.println("Nombre: "+nombre); if (CIERTO) if (CIERTO) 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 erm ep s

Tema 9. Clases abstractas e interfaces. LPS 2005.

11

Uso del interfaz con enlace dinmico


public class PruebaInterfaz { public class PruebaInterfaz { public static void main(String args[]) { public static void main(String args[]) { Elemento elem; Elemento elem; Nombrable inter; Nombrable inter; elem = new Elemento(Luis"); elem = new Elemento(Luis"); elem.mostrarNombre(); elem.mostrarNombre(); // una referencia a interfaz puede // una referencia a interfaz puede //utilizarse con una instancia de //utilizarse con una instancia de // una clase que lo implemente // una clase que lo implemente inter = elem; inter = elem; 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
Aqu la herencia mltiple no plantea problemas porque no se hereda cdigo
interface ElementoOrdenado extends interface ElementoOrdenado extends Comparable, Cloneable, java.io.Serializable { Comparable, Cloneable, java.io.Serializable { // miembros y mtodos propios del interfaz // miembros y mtodos propios del interfaz //ElementoOrdenado //ElementoOrdenado ..... ..... } }
Tema 9. Clases abstractas e interfaces. LPS 2005. 17

Rsumen de interfaces
Las interfaces sirven para:
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

También podría gustarte