Professional Documents
Culture Documents
Pensando en Java
Introduccin
Clase abstracta
permite crear uno o ms mtodos sin definicin
dentro de una clase
se proporciona parte de la interfaz sin proporcionar
la implementacin correspondiente, que ser creada
por sus descendientes.
Interfaz
Produce una clase completamente abstracta,
que no tiene ningn tipo de implementacin.
Interfaces
interface Instrumento
{
int i = 5; // esttico y
constante
// No puede tener def. de
mtodos
// Automticamente pblicos
void tocar ( ) ;
String que ( ) ;
void ajustar ( ) ;
}
Clases implementadas y
extendidas
interface: qu contiene
implements: cmo
funciona
clase ordinaria que
puede extenderse
extends: clase
obtenida por
extensin
interface Instrumento
{
int i = 5;
void tocar ( ) ;
String que ( ) ;
void ajustar ( ) ;
}
}
public String que()
{ return "Maderaviento"; }
}
Orquesta
0
null
null
null
null
null
Orquesta
0
Referencia
al objeto Viento
+
-
Viento
Orquesta
0Referencia
al objeto Viento
1
Referencia
al objeto Percusin
2
Referencia
al objeto Cuerda
3 Referencia
al objeto Metal
4
Ref.
al objeto Maderaviento
Orquesta
0Referencia
al objeto Viento
1
Referencia
al objeto Percusin
2
Referencia
al objeto Cuerda
3 Referencia
al objeto Metal
4
Ref.
al objeto Maderaviento
Orquesta
0Referencia
al objeto Viento
1
Referencia
al objeto Percusin
2
Referencia
al objeto Cuerda
3 Referencia
al objeto Metal
4
Ref.
al objeto Maderaviento
Orquesta
0Referencia
al objeto Viento
1
Referencia
al objeto Percusin
2
Referencia
al objeto Cuerda
3 Referencia
al objeto Metal
4
Ref.
al objeto Maderaviento
Viento. Tocar()
Percusion.tocar()
Cuerda.tocar( )
Metal. tocar ( )
Maderaviento.tocar()
Herencia mltiple
Si se hereda desde una no-interfaz,
slo se puede heredar de una.
Herencia mltiple
El ejemplo siguiente muestra una
clase concreta combinada con varias
interfaces para producir una nueva
clase
Herencia mltiple
import java-util.* ;
public interface PuedeLuchar
{ void luchar ( ) ; }
public interface PuedeNadar
{ void nadar ( ) ; }
PersonajeDeAcc
ion
PuedeLuch
ar
PuedeNada
r
PuedeVolar
class PersonajeDeAccion {
public void luchar ( ) { }
}
Heroes
class Heroe extends PersonajeDeAccion
implements PuedeLuchar, PuedeNadar, PuedeVolar { // primero la clase concreta, y
despus las interfaces
public void nadar () { }
public void volar () { }
}
PersonajeDeAcc
ion
PuedeLuch
ar
PuedeNada
r
PuedeVolar
Heroe
void
void
void
void
t (PuedeLuchar x) { x. luchar ( ) ; }
u (PuedeNadar x) { x.nadar ( ) ; }
v(PuedeVolar x) { x.volar ( ) ; }
w (PersonajeDeAccion x) { x. luchar ( ) ; }
Colisiones de nombres de
mtodos
interface I1 { void f ( ) ; }
interface I2 { int f (int i); }
interface I3 { int f ( ) ; }
Colisiones de nombres de
mtodos
interface I1 { void f ( ) ; }
interface I2 { int f (int i); }
interface I3 { int f ( ) ; }
return types
Colisiones de nombres de
ColisionInterfaces . java: 23 : f ( ) in C
mtodos
cannot
interface I1 { void f ( ) ; }
interface I2 { int f (int i); }
interface I3 { int f ( ) ; }
class EspectaculoDeMiedo {
static void u (Monstruo b)
{ b. amenaza ( ) ; }
interface Letal
{ void matar ( ) ;}
class Dragon implements
MonstruoPeligroso {
public void amenaza ( ) { }
public void destruir ( ) { }
}
interface Vampiro extends
MonstruoPeligroso {
Letal { void beberSangre ( ) ;}
Constantes de
Agrupamiento
Cualquier campo que se ponga en
una interfaz se convierte
automticamente en:
esttico y constante
La interface es una herramienta
conveniente para la creacin de
grupos de valores constantes.
Constantes de
Agrupamiento
package c08;
public interface Meses {
int
ENERO = 1, FEBRERO = 2,
MARZO = 3,
ABRIL = 4, MAYO = 5, JUNIO =
6,
JULIO = 7, AGOSTO = 8,
SEPTIEMBRE = 9, OCTUBRE =
10,
NOVIEMBRE = 11, DICIEMBRE =
12;
Campos pblicos
Nombres en
mayscula,
separando
palabras con guion
bajo
Uso de constantes
con
c08.*
c08.Meses
Inicializando atributos
public interface ValoresAleatorios { Los atributos
int rint = (int) (Math.random() * 10)
definidos en las
;
interfaces son
long rlong = (long) (Math. random (
automticamente
) * 10);
estticos y
}
constantes
-------------------------------------------------- Los atributos
--------pueden
public class PruebaValoresAleatorios {
inicializarse con
expresiones no
constantes.