how to C# subclassing a subclass of MonoBehaviour?

I am having problems calling MonoBehaviour method such as OnCollisionEnter.
start with

public class PowerUp : MonoBehaviour
{
void OnCollisionEnter (Collision collisionInfo)
	{
		Debug.Log("PowerUp");
	}
	
}

this works fine but

public class Strong : PowerUp
{
void OnCollisionEnter (Collision collisionInfo)
	{
		Debug.Log("Strong");
	}
	
}

when I put Strong on an object PowerUp’s method get called not Strong’s (hiding does not seem to work) I can’t override OnCollisionEnter because it is not virtual in MonoBehaviour. I end up doing this which is ugly

public class PowerUp : MonoBehaviour
{

	void OnCollisionEnter (Collision collisionInfo)
	{
		 XOnCollisionEnter (collisionInfo);
	}


virtual void XOnCollisionEnter (Collision collisionInfo)
	{
		Debug.Log("PowerUp");
	}
	
}



public class Strong : PowerUp
{
override void XOnCollisionEnter (Collision collisionInfo)
	{
		Debug.Log("Strong");
	}
	
}

does anyone have a more elegant solution?

For anyone searching this problem after 2017, you can now solve this much more elegantly by making the event methods ‘protected’ and ‘virtual’ in the superclass and ‘override’ them in the subclass. E.g.

public class PowerUp : MonoBehaviour
{
    protected virtual void OnCollisionEnter (Collision collisionInfo)
    {
         Debug.Log("PowerUp");
    }
}

public class Strong : PowerUp
{
    override protected void OnCollisionEnter (Collision collisionInfo)
    {
        Debug.Log("Strong");
    }
}

Nope, that's how it's done. Just call the virtual method from the actual event (if you want the method to be private). Otherwise, just make it public or protected and you should be able to override the base method just fine.