Please be careful with the term "polymorphism". There are lots of definitions out there -- and many are very loose as to include, method overloading, operator overloading, templates / generics, among them. I would highly recommend that you use the one used by your professor (in your textbooks), or you could wind up failing, because you are using one of those ...