Confusion with virtual overriding in the Unity3D [SOLVED]

There is a object with the DoorTile component attached. When the player touches the door object, the base OnPlayerEnter method is called, not the child OnPlayerEnter. The method is marked virtual in the base class and overridden in the child class, so why is this happening?

public class Tile : MonoBehaviour {

    protected virtual void OnPlayerEnter() { }

    private void OnTriggerEnter (Collider collider) {
        if (collider.tag == "Player") {
            OnPlayerEnter();
        }
    }
}

public class DoorTile : Tile {

    protected override void OnPlayerEnter() {
        if (Player.keys > 0) {
            Player.keys -= 1;
        }
    }
}

Creating a new object with the DoorTile component attached fixed the problem. I’m unsure as to why, though.