C# interface default methods are fucked up

Content:

Original link: Default Interface Implementations in C#: Where Inheritance Goes to Troll You / Dev.

The author is right. And I am baffled. My example code is sligtly different than his.

namespace IFDef
{
    public interface IX
    {
        public void M()
        {
            Console.WriteLine("IX");
        }
    }
    public class X : IX
    {
        public void M()
        {
            Console.WriteLine("X");
        }
    }
    public interface IY
    {
        public void M()
        {
            Console.WriteLine("IY");
        }
    }
    public class YBase : IY
    {
    }
    public class Y : YBase
    {
        public void M()
        {
            Console.WriteLine("Y");
        }
    }
    public interface IZ
    {
        public void M()
        {
            Console.WriteLine("IZ");
        }
    }
    public class ZBase : IZ
    {
    }
    public class Z : ZBase, IZ
    {
        public void M()
        {
            Console.WriteLine("Z");
        }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            IX ox = new X();
            ox.M();
            IY oy = new Y();
            oy.M();
            IZ oz = new Z();
            oz.M();
        }
    }
}

Output:

X
IY
Z

Java does it right.

public class IFDef {
    public static interface IX
    {
        public default void m() {
            System.out.println("IX");
        }
    }
    public static class X implements IX {
        public void m() {
            System.out.println("X");
        }
    }
    public static interface IY
    {
        public default void m() {
            System.out.println("IY");
        }
    }
    public static class YBase implements IY {
    }
    public static class Y extends YBase {
        public void m() {
            System.out.println("Y");
        }
    }
    public static interface IZ
    {
        public default void m() {
            System.out.println("IZ");
        }
    }
    public static class ZBase implements IZ {
    }
    public static class Z extends ZBase implements IZ {
        public void m() {
            System.out.println("Z");
        }
    }
    public static void main(String[] args) {
        IX ox = new X();
        ox.m();
        IY oy = new Y();
        oy.m();
        IZ oz = new Z();
        oz.m();
    }
}

Output:

X
Y
Z

Comments: