We responded at the same time, but don't use 'new' keyword in your derived class implementations. Use 'override' instead.

'new' hides the derived class' implementation. If you use 'new', then you can't do:

Human human = new Superhero();

You can, but then all human.Member calls will be calling Human versions instead of Superhero versions.

You must do:

Superhero human = new Superhero();

If you want to use the 'new' version of each implemented member.

The easy solution is to change 'new' to 'override' in your derived classes.

Then you can do:

Human human = new Superhero();

And human.Method will call the Superhero() overriden version instead of the base Human version.