In Objective C, for example, both the generic Object and NSObject (in Cocoa/OpenStep) provide the method isMemberOfClass: which returns true if the argument to the method is an instance of the specified class. The method isKindOfClass: analogously returns true if the argument inherits from the specified class.
For example, say we have a Puppy and Kitten class inheriting from Animal, and a Vet class.
Now, in the desex method we can write
- desex: (id) to_desex
{
if([to_desex isKindOfClass:[Animal class]])
{
//we're actually desexing an Animal, so continue
if([to_desex isMemberOfClass:[Puppy class]])
desex_dog(to_desex);
else if([to_desex isMemberOfClass:[Kitten class]])
desex_cat(to_desex);
else
error();
}
else
{
error();
}
}
Now, when desex is called with a generic object (an id), the function will behave correctly depending on the type of the generic object.Type introspection can be used to implement polymorphism.