Thus, the super keyword ensures that the version of the called function will be called by the super class (in particular, B.test (), and not by D.test ()).
But this certainly does not answer your question.
The reason the second term D1 is not B0, because D.m1 () polymorphically redefines B.m1 ().
The reason the first member of B0 is not D0 is because D.m0 () DOES NOT override B.m0 () because b.m0 is private.
source share