Title: Clases Extendidas
1Clases Extendidas
La clase extendida hereda los campos y métodos de
la clase de la cual extiende.
La clase original se conoce como superclase y la
clase extendida como subclase.
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 polimórficas 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 a cualquier objeto.
4Ejemplo de clases extendidas
import java.io. class vehiculo protected
long idnum protected String nombre "sin
nombre" private static long sigId 0 public
vehiculo( ) idnum sigId protected long
getsigId() return sigId
5Ejemplo de clases extendidas
- 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) -
6Ejemplo de clases extendidas
class Vehiculopasajeros extends vehiculo int
asientos 50 int ocupados public
Vehiculopasajeros( int disponibles, int
ocu) super() asientos disponibles ocupa
dos ocu
7Ejemplo 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())
8Ejemplo 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)
9Significado 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
extendidas.
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
10Significado 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.
11Constructores 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
construido 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.
12Valores iniciales para los campos
Tipos Valores iniciales numericos 0 char
/u0000 boolean false referencias a
objetos null
13Orden 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.
14Anulación de métodos y ocultamiento de campos (I)
anulan Métodos sobrecargan
Campos ocultan
15Anulación y sobrecarga de métodos
- 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.
16Anulación y sobrecarga de métodos
- 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.
17Anulación y sobrecarga de métodos
- Si una subclase define un método de clase, con la
misma signatura que un método de clase de la
superclase, el método de la subclase oculta al de
la superclase. - La diferencia entre sobrecargar y ocultar es
importante
18Anulación y sobrecarga de métodos
- public class Animal
- public static void testClassMethod()
System.out.println("The class method in
Animal.") - public void testInstanceMethod()
System.out.println("The instance method in
Animal.")
19Anulación y sobrecarga de métodos
- public class Cat extends Animal
- public static void testClassMethod()
System.out.println("The class method in Cat.")
- public void testInstanceMethod()
System.out.println("The instance method in
Cat.") - public static void main(String args)
- Cat myCat new Cat()
- Animal myAnimal myCat
- Animal.testClassMethod()
myAnimal.testInstanceM
ethod() -
20Anulación y sobrecarga de métodos
- The class method in Animal.
- The instance method in Cat.
La implementación del método de clase que se
invoca es el de la superclase. La implementación
del método de instancia que se invoca es el de la
subclase.
21Anulació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. No es recomendable.
22Anulación de métodos de instancia 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
23Anulación de métodos y ocultamiento de campos
- La clase A, tiene un campo String x, y la clase
B tiene también un campo String x,que oculta al
campo de la superclase, y con un método de
instancia 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)
24Object como superclase
- public boolean equals(Object obj)
- protected void finalize() throws Throwable
- public String toString()
-
25Object como superclase equals
- public class Book
- ...
- public boolean equals(Object obj)
- if (obj instanceof Book)
- return ISBN.equals((Book)obj.getISBN())
- else return false
26Object como superclase finalize
- finalize para asegurar que los recursos
utilizados quedan en un estado consistente - toString retorna un objeto en forma de String.
Esto depende exclusivamente del objeto, razón por
la cual debe sobrecargarse el método.
27Clases y métodos finales
- En un método indica que el mismo no puede
anularse en las subclases. - En una clase indica que no pueden extenderse
clases de ellas.
28Métodos y clases abstractas
- Una clase abstracta es una que se declara
abstract - abstract class figura
- .....................
-
- y puede o no contener métodos abstractos.
- Una clase abstracta no puede ser instanciada.
29Métodos y clases abstractas
- Un método abstracto es uno que es declarado pero
no implementado. - Si una clase incluye métodos abstractos debe
declararse como abstracta. - public abstract class figura
- abstract void dibujarse (double x, double y)
- .................
-