Last updated 2004-06-28 by Roedy
Green ©1996-2004 Canadian Mind Products
Java definitions: 0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
You are here : home : Java Glossary : C words : contravariance.
Suppose further that a class Animal_printer implements the method:
void print(Animal a);
Can I say that Animal_printer implements Dog_printer? Logically, I should be able to. Anywhere that a Dog_printer is expected, I can supply an Animal_printer, and the dog will get printed. (Because all dogs are animals.) So, logically, there is the relation:
Animal_printer is a subtype of Dog_printer.
Although logically correct, this is weird looking. Then again, something that can print any animal "extends" something that can print any dog, so maybe it isn't so weird. Anyway, to determine whether Animal_printer is a subtype of Dog_printer, we have used the "contravariant argument rule". Similarly, there is a "covariant return value rule" that would state that:
Dog_creator is a subtype of Animal_creator.
home |
Canadian Mind Products | |||
| mindprod.com IP:[24.87.56.253] | ||||
| Your IP:[80.134.30.163] | ||||
| You are visitor number 965. | ||||
| Please send errors, omissions and suggestions | ||||
| to improve this page to Roedy Green. | ||||
| You can get a fresh copy of this page from: | or possibly from your local J: drive mirror: | |||
| http://mindprod.com/jgloss/contravariance.html | J:\mindprod\jgloss\contravariance.html | |||