<< Chapter < Page | Chapter >> Page > |
In this case, the method named m is defined in the class named B , which is two levels down from the class named Object .
When the reference to the object of the class B was assigned to the reference variable of type Object , the type of the reference was automatically converted to type Object .
Therefore, because the reference is type Object , it cannot be used directly to call the method named m .
In this case, the solution to the problem is a downcast.
The code in Listing 6 shows an attempt to solve the problem by casting the reference down the hierarchy to type A .
Listing 6 . Try a downcast to type A.
//Following will not compile
//((A)var).m();
However, this still doesn't solve the problem, and the result is another compiler error.
Again, it was necessary to convert the statement into a comment in order to cause the program to compile.
The problem with this approach is that the downcast simply didn't go far enough down the inheritance hierarchy.
The class named A does not contain a definition of the method named m . Neither does it inherit the method named m . The method named m is defined in class B, which is a subclass of A .
Therefore, a reference of type A is no more useful than a reference of type Object insofar as calling the method named m is concerned.
The solution to the problem is shown in Listing 7 .
Listing 7 . Try a downcast to type B.
//Following will compile and run
((B)var).m();
The code in Listing 7 casts (temporarily converts) the reference value contained in the Object variable named var to type B .
The method named m is defined in the class named B . Therefore, a reference of type B can be used to call the method.
The code in Listing 7 compiles and executes successfully. This causes the method named m to execute, producing the following output on the computer screen:
m in class B
Before leaving this topic, let's look at a few more issues.
The code in Listing 8 declares and populates a new variable of type B.
Listing 8 . Assign var to v1.
//Following will compile and run
B v1 = (B)var;
The code in Listing 8 uses a cast to:
This is a legal operation. In this class hierarchy, the reference to the object of the class B can be assigned to a reference variable of the types B, A , or Object .
However, the reference to the object of the class B cannot be assigned to a reference variable of any other type, including type C . An attempt to do so is shown in Listing 9 .
Notification Switch
Would you like to follow the 'Xna game studio' conversation and receive update notifications?