Yes, it should, but the virtual keyword is not necessary because you're not using pointers to the base class to enable polymorphism. If those three objects were being accessed through pointers to baseClass, then baseClass' GiveMe() would have to be virtual for that to work. Once a method is declared virtual, it will be virtual for every class that inherits from its own class.