Title: Clases Extendidas
1Clases Extendidas
La clase extendida hereda los campos y métodos de
la clase que ha sido extendida.
La clase original se conoce como superclase.
2Clases Extendidas
Una clase extendida se puede usar en cualquier
lugar en que se podÃa usar la superclase. Esto se
conoce como polimorfismo. Clases diferentes, que
se denominan polimorficas pueden implementar
métodos con el mismo nombre. Es decir objetos de
clases distintas pueden entender mensajes
iguales. Las clases extendidas, en Java, se
declaran con la claúsula extends.
3Clases Extendidas
En Java todos los ejemplos que hemos visto hasta
ahora extienden implicitamente de la clase
Object. Object es la raÃz de todas las clases.
Esta clase declara métodos que heredan todas las
clases. Las variables de clase Object pueden
referenciar cualquier objeto.
4Ejemplo de clases extendidas
import java.io. class vehiculo protected
long idnum protected String nombre "sin
nombre" private static long sigId
0 vehiculo( ) idnum sigId protected
long getsigId() return sigId public static
void main(String args) vehiculo auto new
vehiculo() auto.nombre "Miauto" vehiculo
colectivo new vehiculo() colectivo.nombre
"Micolectivo" System.out.println("Vehiculo"
auto.nombre) System.out.println("Vehiculo"
colectivo.nombre)
5Ejemplo de clases extendidas
class Vehiculopasajeros extends vehiculo int
asientos 50 int ocupados public
Vehiculopasajeros( int disponibles, int
ocu) super() asientos disponibles ocupa
dos ocu
6Ejemplo de clases extendidas
public static void main(String args)
int cant 60 int ocu 0
Vehiculopasajeros Urbano new Vehiculopasajeros(c
ant,ocu) System.out.println(" sigid de Urbano
" Urbano.getsigId()) Vehiculopasajeros
Inter new Vehiculopasajeros(cant,ocu) System.
out.println(" sigid de Inter "
Inter.getsigId())
7Ejemplo de clases extendidas
Urbano.nombre "Cinta de Plata" Inter.nombre
"Turicenter" System.out.println("Vehiculo de
pasajeros " Urbano.nombre) System.out.print
ln() System.out.println("Vehiculo de pasajeros
" Urbano.asientos)
8Significado de protected
Un miembro protegido se puede acceder desde una
clase por medio de referencias de objeto que sean
del mismo tipo que la clase o de sus clases
extendiadas.
vehiculo
Vehiculopasajeros puede acceder a nombre, a
través de una referencia a Vehiculopasajeros o
una referencia a combi. No puede acceder a través
de una referencia a auto.
protected nombre
Vehiculopasajeros
auto
combi
9Significado de protected
- Si nombre fuese estático, puedo acceder a él a
través de cualquier referencias a cualquier tipo
vehiculo. - Los miembros declarados protected también son
accesibles a todo el código de paquete. - El mismo tratamiento explicado con los campos,
ocurre con los métodos.
10Constructores en las clases extendidas
La clase extendida debe invocar uno de los
constructores de la superclase, para que la parte
del objeto que controla la superclase sea
construÃdo en forma correcta. Para ello se puede
usar super( ) Si no se invoca en forma
explÃcita un constructor de la superclase, se
invoca en forma automática el constructor sin
argumentos de la superclase, por lo cual la
superclase deberÃa tener un constructor no-arg.
11Valores iniciales para los campos
Tipos Valores iniciales numericos 0 char
/u0000 boolean false referencias a
objetos null
12Orden de ejecución
1. Invocar un constructor de la superclase. 2.
Inicializar los campos usando sentencias de
inicialización. 3. Ejecutar el cuerpo del
constructor.
13Anulación de métodos y ocultamiento de campos
anulan Métodos sobrecargan
Campos ocultan
14Anulación de métodos y ocultamiento de campos
- Sobrecargar un método es tener más de un método
con el mismo nombre pero con signaturas
distintas. - Anular un método es sustituir la implementación
de un método de la superclase, por una
implementación propia para la subclase. Las
signaturas deben ser idénticas y el tipo devuelto
también deben ser iguales. - La claúsula throws del método anulador puede
listar menos tipos de excepciones que la claúsula
throws del método que se anuló, pero nunca más.
15Anulación de métodos y ocultamiento de campos
- Los métodos anulados tienen sus propios
especificadores de acceso. Una clase extendida
puede modificar el acceso de los métodos de la
superclase, pero sólo si otorga más acceso.
- Un método declarado protected puede ser
redeclarado protected o public pero no private.
16Anulación de métodos y ocultamiento de campos
Los campos no se pueden anular sólo se pueden
ocultar. Para ocultarlo basta con declarar un
campo del mismo nombre, que un campo que ya
existe en la superclase. Para acceder al campo de
la superclase utilice super o una referencia del
tipo de la superclase.
17Anulación de métodos y ocultamiento de campos
- Cuando se invoca un método sobre un objeto, el
tipo real del objeto determina que implementación
se usa. - Cuando se accede a un campo se usa el tipo
declarado de la referencia. - Tengo una clase A y una clase B que extiende de
A. - B segundo new B( )
- Determina la referencia al objeto
-
Determina el tipo real del objeto
18Anulación de métodos y ocultamiento de campos
- La clase A,tiene un campo String x, y laclase B
tiene también un campoString x,que oculta al
campo de la superclase, y con un método mostrar
que esta anulado en la clase extendida. - B primero new B( ) (B clase extendida)
- A segundo primero (A superclase)
- primero.mostrar( )
- segundo.mostrar( ) (siempre se invoca el método
del tipo real del objeto, en este caso el método
implementado en B). - Primero.x ( se refiere al campo de B)
- Segundo.x ( se refiere al campo de A)