Metody mogą być statyczne (domyślnie), wirtualne, lub dynamiczne. Metody wirtualne i dynamiczne mogą pokrywane, i mogą być abstrakcyjne. Rodzaj metody ma znaczenie, gdy zmienna danego typu klasowego przechowuje obiekt klasy potomnej. Rodzaj metody determinuje, które implementacje są aktywowane kiedy metoda jest wywoływana.