The virtual keyword is used for different but related purposes in OOP. Generally it means something you reference indirectly as if it were one type, but actually get back something else. In OOP, this concept is also refereed to as polymorphism. This is a big topic, but fortunately there is a lot of reference material on this around.