You are on page 1of 4

Clases abstractas Clases abstractas e interfaces

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

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

Java

Arrays y Cadenas

Java

Arrays y Cadenas

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 Java Arrays y Cadenas

los mtodos abstactos no tienen cuerpo dibuja un crculo

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

dibuja un rectngulo

Java

Arrays y Cadenas

Clases abstractas
n

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 void mostrarNombre () { System.out.println(cuadrado);}}

n n

Las subclases de una clase abstracta deben: w Sobreescribir todos los mtodos abstractos de la superclase, o bien w Ser declaradas como clases abstractas Una clase abstracta no puede instanciarse w 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

Java

Arrays y Cadenas

Java

Arrays y Cadenas

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 "+fig .area()); System.out.println("Area .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 Java Arrays y Cadenas 7

Interfaces
Slo declaran comportamiento
n n

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

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


w Por legibilidad normalmente los declaramos

static y final
Java

} } } }

Arrays y Cadenas

Interfaces
Permite simular algunos aspectos de la herencia mltiple
n n

Declaracin de interfaces
Sintaxis
interface NombreInterfaz NombreInterfaz { { interface tipo static static final final NOMBRECONSTANTE1 NOMBRECONSTANTE1 = = valor; valor; tipo ... ... public tipoDevuelto tipoDevuelto nombreMetodo1( nombreMetodo1(listaParmetros) listaParmetros); ; public ... ... } } class NombreClase implements implements NombreInterfaz1 class NombreClase NombreInterfaz1 Implementacin del interfaz en una clase [, NombreInterfaz2 NombreInterfaz2 ..] ..] { { [, n Una clase puede implementar variosde interfaces // declaracin declaracin atributos y mtodos mtodos de la clase clase // atributos y la ... ... } }
9 Java Arrays y Cadenas 10

Define un tipo de datos Posibilita el enlace dinmico

Otras clases pueden implementar un interfaz


n

Cualquier clase que implemente un interfaz debe definir todos los mtodos de dicho interfaz

w Debe proporcionar la implementacin de dichos mtodos


n

Si la clase no proporciona la implementacin para todos los mtodos del interfaz debe ser declarada como abstracta
Java Arrays y Cadenas

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 CIERTO "); "); System.out.println("Constante Java Arrays y Cadenas 12 }} }}

Asalariado implements Empelado extends Programador


Payable p = new Programmer();

ite rm pe se

Java

Arrays y Cadenas

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(); } } }
Java Arrays y Cadenas 13

Ejemplo de interfaces
{interface}
Humano Actor Canino

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

Perro ... actua() ...

Java

Arrays y Cadenas

14

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

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

sin cuerpo

public class Persona extends Humaon implements Actor { public void actua(){ /*...*/}; //... } public class Perro extends Canino implements Actor { public void actua(){ /*...*/}; //... }
Java Arrays y Cadenas 15

Es similar a la herencia de clases

Java

Arrays y Cadenas

16

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

Rsumen de interfaces
Las interfaces sirven para:
n

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 ..... ..... } }
Java Arrays y Cadenas 17

Declarar mtodos que sern implementados por una o ms clases. Determinar la interfacede 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.
Java Arrays y Cadenas 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

Java

Arrays y Cadenas

19

You might also like