Download Clases abstractas e interfaces. - Caminos

Document related concepts
no text concepts found
Transcript
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