jueves, 24 de febrero de 2011

SUB CLASES

Consideraciones importantes al usar subclases:
Una variable de la clase A, también puede contener referencias a objetos de la clase B, porque estos objetos pertenecen a la clase B y a la clase A. Este concepto se denomina proyección.

A a;
a= new B(); // Proyección

Se dice que A es el tipo estático de la variable a y B es el tipo dinámico de a. El tipo estático siempre se determina en tiempo de compilación mientras que el tipo dinámico en general sólo se puede conocer en tiempo de ejecución y puede cambiar.


Dada una variable a, Java sólo permite invocar los métodos y accesar las variables conocidas para el tipo estático de a.

a.Incx(); // Ok
a.x;      // Ok
a.Incz(); // error, Incz no está definido para A

Del mismo modo, Java sólo permite asignar una expresión a una variable de tipo A si el tipo de la expresión es A o una subclase de A:

B b= new A(); // error, el objeto no pertence a
              // la clase B
A a= new B(); // Ok
...
B b= a;       // error, la clase estática de a
              // no es una subclase de B.


Un objeto se puede convertir a una referencia de la clase B mediante un cast:

A a=new B();
B b=(B)a;
b.Incz();        // Ok
( (B)a ).Incz(); // Ok

No todo objeto se puede convertir a la clase B.

A a= new A();
...
B b=(B)a;      // Ok, en compilación, pero
               // error en tiempo de ejecución

Java chequea durante la ejecución todas las conversiones explícitas (casts). Si el objeto no pertence a la clase a la cual se pretende convertir, entonces se produce una excepción.

No hay comentarios:

Publicar un comentario