Multiple inherited class and overriding build-in methods multiple times, how make it work?

Hi,
i want to ask you about double overriding build-in methods in C#.
I have 3 classes “Base” “MiddleBase” “End”.

In Base:

public class Base : MonoBehaviour {

    public virtual void Start () {      
        Debug.Log("Start Base");	
	}

    public virtual void Update () {
        Debug.Log("Update Base");
    }
}

MiddleBase :

public class MiddleBase : Base{

    public virtual void Start() {
        base.Start();
        Debug.Log("Start MiddleBase ");

    }
    public virtual void Update() {
        base.Update();
        Debug.Log("Update MiddleBase ");

    }
}

End:

public class End: MiddleBase {

    public override void Start()
    {
        base.Start();
        Debug.Log("Start End");
	
	}

    public override void Update()
    {
        base.Update();
        Debug.Log("Update End");
	}
}

What i want to get is:
Start Base
Start MiddleBase
Start End
Update Base
Update MiddleBase
Update End
Update Base
Update MiddleBase
Update End

Well, as you probably know already, it doesn’t work. Only Base and MiddleBase are running, End doesn’t.
My question is, how to multiple overriding build-in methods like Start and Update?

In addition, i want to do the same with OnCollisionEnter2D but i guess i will have same problem.

First of all your middle base is already wrong. Since you derived your middle base class from your base class you already inherit the Start and Update method. So you would have to override it in the middle class and the end class.

Apart from that i don’t see a reason why you shouldn’t see all 3 debug logs when you attach the “end” script to a gameobject. The only reason why you don’t see the 3rd debug log is because you either have an error inside your method which will cause an exception which terminates the execution of your method at that point, or you don’t use an “end” instance but a middle or base instance in which case you of course don’t see the 3rd debug log.

I changed middle class for :

public class MiddleBase : Base {

    public override void Start() {
        base.Start();
        Debug.Log("Start MiddleBase"); 
    }

    public override void Update() {
        base.Update();
        Debug.Log("Update MiddleBase");    
    }
}

And of course, i did attach middle class to object instead of end. Sorry for wasting your time.