Clases abstractas Clases abstractas e interfaces Clases cuya descripción es incompleta. Una clase abstracta declara métodos, pero no tiene que implementarlos. n n Java Arrays y Cadenas 1 Clases abstractas dibuja setColor ... public class Circle extends Forma{ private int radio; // ... public void dibuja(){ /*...*/ }; public void setRadio(int){/*...*/}; } Otras Circulo Rectangulo altura anchura ... setRadio ... public class Rectangle extends Forma{ private int altura, anchura; // ... public void dibuja(){ /*...*/ }; public void setAltura(int){/*...*/}; } setAltura ... Java Arrays y Cadenas 3 Clases abstractas n n n n 2 Arrays y Cadenas Java los métodos abstactos no tienen cuerpo dibuja un círculo dibuja un rectángulo Arrays y Cadenas 4 Ejemplo clase abstracta Las subclases de una clase abstracta deben: w Sobreescribir todos los métodos 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 métodos no abstractos. No se pueden definir constructores abstractos o métodos estáticos abstractos. Java Arrays y Cadenas public abstract class Forma { private int xpos, ypos; private Color color; // ... public abstract void dibuja(); public void setColor(Color c){ /*...*/ }; } xpos ypos color ... radio ... Java Clases abstractas {abstract} Forma No proporcionan la implementación de todos sus métodos w Los métodos no implementados se declaran como abstract Una clase con un método abstracto debe declararse como clase abstracta w Pero una clase puede declararse como abstracta aunque no tenga ningún método abstracto 5 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 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”);}} Figura Java Arrays y Cadenas 6 1 Prueba clase abstracta Interfaces 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 Sólo declaran comportamiento n n 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 w No implementan el comportamiento n fig == tri tri;; fig fig.mostrarNombre(); (); fig.mostrarNombre System.out.println("Area triangulo: triangulo: "+fig "+fig.area()); .area()); System.out.println("Area }} Se utiliza la palabra clave interface Por defecto todos sus métodos son públicos y abstractos Por defecto todos sus atributos son públicos, constantes y de clase w Por legibilidad normalmente los declaramos static y final 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 Java Arrays y Cadenas 8 }} Interfaces Declaración de interfaces Sintaxis Permite simular algunos aspectos de la herencia múltiple n n interface NombreInterfaz NombreInterfaz {{ interface tipo static static final final NOMBRECONSTANTE1 NOMBRECONSTANTE1 == valor; valor; tipo …….….…. …….….…. public tipoDevuelto tipoDevuelto nombreMetodo1( nombreMetodo1(listaParámetros) listaParámetros);; public …….….…. …….….…. }} Define un tipo de datos Posibilita el enlace dinámico Otras clases pueden implementar un interfaz n Cualquier clase que implemente un interfaz debe definir todos los métodos de dicho interfaz class NombreClase implements implements NombreInterfaz1 class NombreClase NombreInterfaz1 Implementación del interfaz en una clase [, NombreInterfaz2 NombreInterfaz2 ..] ..] {{ [, n Una clase puedeatributos implementar variosde interfaces // declaración declaración atributos métodos de la clase clase // yy métodos la …….….…. …….….…. }} w Debe proporcionar la implementación de dichos métodos n Si la clase no proporciona la implementación para todos los métodos del interfaz debe ser declarada como abstracta Java Arrays y Cadenas 9 interfaces Java Arrays y Cadenas 10 Ejemplo de interfaz Programador es un Asalariado Asalariado implements Empelado ite rm pe se extends Payable p = new Programmer(); Programador Java Arrays y Cadenas 11 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 método método 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 }} }} 2 Uso del interfaz con enlace dinámico Ejemplo de interfaces 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 {interface} Humano Actor Canino elem == new new Elemento(“Luis"); Elemento(“Luis"); elem elem.mostrarNombre(); elem.mostrarNombre(); // una una referencia referencia aa 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 Perro ... ... actua() act() ... actua() ... 13 Ejemplo de interfaces interface Actor { void actua(); } Persona Person Java Arrays y Cadenas 14 Extensión de interfaces Se puede definir un interface que especialice a otro interface mediante extends sin cuerpo public class Persona extends Humaon implements Actor { public void actua(){ /*...*/}; //... } n Es similar a la herencia de clases public class Perro extends Canino implements Actor { public void actua(){ /*...*/}; //... } Java Arrays y Cadenas 15 Extensión de interfaces n n interface ElementoOrdenado ElementoOrdenado extends extends interface Comparable, Cloneable, Cloneable, java.io.Serializable java.io.Serializable {{ Comparable, // miembros miembros yy métodos métodos propios propios del del interfaz interfaz // //ElementoOrdenado //ElementoOrdenado ..... ..... }} Arrays y Cadenas 16 Las interfaces sirven para: Aquí la herencia múltiple no plantea problemas porque no se hereda código Java Arrays y Cadenas Résumen de interfaces No obstante un interface puede extender a varios interfaces a la vez n Java 17 n n Declarar métodos que serán implementados por una o más clases. Determinar la interfacede programación de un objeto, sin mostrar el cuerpo de la clase. Capturar similitudes entre clases no relacionadas, sin forzar una relación entre ellas. Describir objetos "tipo-función", que podrán ser utilizados como argumentos al invocar métodos sobre objetos. Java Arrays y Cadenas 18 3 Résumen de interfaces Tipo herencia instanciable implementa datos Class Abstract Class Interface extends (simple) extends (simple) no implements (multiple) yes metodos algún método Se permiten Se permiten Java Arrays y Cadenas no nada no se permiten 19 4