<< Chapter < Page | Chapter >> Page > |
An inherited virtual method can be overridden by every class that inherits it, resulting in potentially many differentoverridden versions of a given method in a class hierarchy.
Listing 3 . Definition of class C.
class C : B {
public override String ToString() {return "ToString in class C";
}//end overridden ToString()}//end class B
The behavior of this overridden version of the method is similar to, but different from the overridden version in the class B.
In this case, the method returns a reference to a String object that can be used to confirm that this overridden version of the methodhas been executed.
Listing 4 shows the beginning of the driver class named Polymorph04 .
Listing 4 . Beginning of the driver class.
public class Polymorph04 {
public static void Main() {Object varA = new A();
String v1 = varA.ToString();Console.WriteLine(v1);
The Main method of the driver class begins by instantiating a new object of the class A, and saving the object's reference in a reference variable of type Object , named varA .
It is very important to note that even though the object was instantiated from the class named A , the reference was saved as type Object , not type A.
Then the code in Listing 4 calls the ToString method on the reference variable named varA , saving the returned reference to the String object in a reference variable of type String named v1 .
Finally, that reference is passed to the WriteLine method, causing the String returned by the ToString method to be displayed on the computer screen. This causes the text shown in Figure 1 to be displayed.
Figure 1 . Text output for ToString method and class A.
A
What you are seeing here is the String produced by the default version of the ToString method, as defined by the class named Object . The default implementation of the ToString method returns the fully qualified name of the type of the object. In this case, the object was instantiated from the class named A (so the type of the object is A ) .
Recall that our new class named A does not override the ToString method. Therefore, when the ToString method is called on a reference to an object of the class A, the default version of the method is executed, producing the output shown in Figure 1 .
Now consider the code shown in Listing 5 , which instantiates a new object of the class named B , and stores the object's reference in a reference variable of type Object .
Listing 5 . A new object of the class B.
Object varB = new B();
String v2 = varB.ToString();Console.WriteLine(v2);
The code in Listing 5 calls the ToString method on the reference of type Object , saving the returned reference in the reference variable named v2 . (Recall that the ToString method is overridden in the class named B .)
As before, the reference is passed to the WriteLine method, which causes the text shown in Figure 2 to be displayed on the computer screen.
Notification Switch
Would you like to follow the 'Xna game studio' conversation and receive update notifications?