2. Type Casting
Converting an object of one class to an
object of another class is possible if the
object types are compatible.
Java will perform some conversion
automatically. Such conversions are
known as implicit type casting.
Conversions forced by the programmer is
known as explicit type casting.
3. Eg.,
PERSON
X
Y Z TEACHER STUDENT
Z1 Z2
UG_STUD PG_STUD
ENT ENT
4. Class definition
public Class X Class Y extends X {
{
public void F(); public void F();
public void F1(); public void F2a();
} }
// X is a super class of Y Class Z extends X
and Z which are sub {
classes. public void F();
public void F2b();
}
5. Cont.,
Class Z1 extends Z
{
public void F();
public void F3a();
} // Z1,Z2 are subclasses which is
derived from Z.
Class Z2 extends Z
{
public void F();
public void F3b();
}
6. Cont..
1. X x = new X(); //no casting required
2. Y y = new Y(); //no casting required
3. Z z = new Z(); //no casting required
4. X xy = new Y(); // compiles ok (up the
hierarchy)
5. X xz = new Z(); // compiles ok (up the
hierarchy)
6. Y yz = new Z();// incompatible type
(siblings)
7. Cont..
1. X x = new X(); //no casting required
2. Y y = new Y(); //no casting required
3. Z z = new Z(); //no casting required
4. X xy = new Y(); // compiles ok (up the
hierarchy)
5. X xz = new Z(); // compiles ok (up the
hierarchy)
6. Y yz = new Z();// incompatible type
(siblings)
8. Cont..
1. Y yz = new Z(); //incompatible type
(siblings)
2. Y y1 = new X(); //incompatible. X is not a
Y
3. Z z1 = new X(); //X is not a Z
4. X x1 = y; // compiles ok (y is subclass of X)
5. X x2 = z; // compiles ok (z is subclass of X)
9. Object type Casting
Y yx = (Y) x1; // compiles and runs ok (x1 is type Y)
Z zx = (Z) x2; // compiles and runs ok (x2 is type Z)
// X xy = new Y(); (declared earlier)
xy.F(); //calls method F() of class X
((Y)xy).F(); //explicitly type cast xy to
method call F() class Y
((Y)xy).F2a(); // call the method F2a()
from class Y
10. Object Type Casting.,
X xz1=new Z1();
((Z1)xz1).F();//calls method F() in class Z1
((Z1)xz1).F1();//calls method F1() in class X
((Z1)xz1).F2b();//calls method F2b() in class Z
((Z1)xz1).F3a();//calls method F3a() in class Z1