contravariance : Java Glossary

go to home page C words local find full screen, hide local find menu Google search web for more information on this topic jump to foot of page translate this page with Babelfish punctuation 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 (all) ©1996-2009 Roedy Green, Canadian Mind Products
contravariance
In Java, when you override a method, both parameters and return type must match exactly. In other languages, such as Eiffel, under certain circumstances, they need not precisely match. Here is a definition from Greg Weeks weeks@orpheus.dtc.hp.com Suppose I have the following interface:
interface Dog_printer {
void print(Dog d);
}

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.


CMP homejump to top You can get the freshest copy of this page from: or possibly from your local J: drive (Java virtual drive/mindprod.com website mirror)
http://mindprod.com/jgloss/contravariance.html J:\mindprod\jgloss\contravariance.html
CMP logofeedback Please email your feedback for publication, errors, omissions, typos, formatting errors, ambiguities, unclear wording, broken/redirected link reports, suggestions to improve this page or comments to Roedy Green : feedback email
mindprod.com IP:[65.110.21.43]
view BlogYour face IP:[38.107.191.100]
You are visitor number 9,468.