P. 1
muy buen curso de java

muy buen curso de java

4.64

|Views: 6,923|Likes:
Published by banban63

More info:

Published by: banban63 on Jul 22, 2008
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

08/17/2013

pdf

text

original

Java no dispone de herencia múltiple. Eso significa que no podemos heredar
directamente de más de una clase. A veces sería conveniente hacerlo, bien sea por motivos
conceptuales o prácticos. Un ejemplo del primer caso es el siguiente: tenemos una clase
Estudiante (con atributos como las asignaturas que está haciendo) y una clase Profesor (con

Capítulo 6: Programación orientada a objetos

Java

- 53 -

atributos como el sueldo que cobra de la universidad). Nos gustaría poder definir una clase
Becario que tuviera los atributos y métodos de ambos.

Desearíamos disponer de herencia múltiple por razones prácticas en el siguiente caso.
Imaginemos que queremos que los directivos de nuestra empresa puedan ser ordenados por
sueldo. Alguien ha escrito una rutina de ordenación de arrays, pero dicha rutina necesita de
un método compareTo() para comparar los elementos del array:

abstract class Sortable {
public abstract int compareTo(Sortable b);

}

class ArrayAlg
{

public static void sort(Sortable[] a) {
...

}

}

La rutina de ordenación sólo funciona para arrays de tipo Sortable (o cualquiera de
sus descendientes), puesto que es la forma de asegurarse que todo objeto en el array
dispone del método compareTo(). Para usar esta rutina de ordenación para ordenar
directivos, la clase Directivo tendría que heredar de Sortable, pero ya hereda de Empleado.

En estos casos Java ofrece una facilidad que nos permite lograr casi los mismos
resultados que si tuviéramos herencia múltiple: las interfaces.

Una interfaz es como un sucedáneo de clase que “promete” la disponibilidad de unos
ciertos métodos sin implementar ninguno de ellos. Se declara de forma muy similar a una
clase:

public interface NombreInterface
{

...

}

Dentro podemos declarar cabeceras de métodos y constantes. De alguna forma es
como una clase totalmente abstracta. El punto clave es que una clase puede heredar de una
única clase, pero puede “implementar” tantos interfaces como le haga falta. Y cuando una
clase declara que “implementa” un cierto interfaz, se interpreta a todos los efectos que dicha
clase también posee el tipo del interfaz. Así si Sortable fuera un interfaz en lugar de una
clase, podríamos heredar Directivo de Empleado como hasta ahora, y declarando que
Manager implementa Sortable podríamos pasar un array de Directivo a la rutina sort():

Capítulo 6: Programación orientada a objetos

Java

- 54 -

Profesor

Que puede tener atributos
como el sueldo

Alumno

Que puede tener atributos
como el las asignaturas
que cursa

Becario

Que puede tener atributos
de ambos, tanto el sueldo
como las asignaturas que
cursa

public interface Sortable
{

public int compareTo(Sortable b);

}

public class Directivo extends Empleado implements Sortable
{

...

public int compareTo(Sortable b)

{

...

}

}

Para indicar los interfaces implementados usamos implements:

class NombreClase extends NombreSuperClase implements Interface1,
Interface2 ...
{

...

}

Fig. 12

Herencia múltiple

Capítulo 6: Programación orientada a objetos

Java

- 55 -

Podemos declarar variables de tipo interface, pero no instanciar objetos de tipo
interface (idéntico que con las clases abstractas). También es posible que un interface
herede de otro mediante extends.

Como conclusión podemos decir que en Java sólo podemos heredar la
implementación de un único tipo, pero podemos heredar la interfaz (es decir, una lista de
métodos con su cabecera) de varios tipos a la vez.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->