なんでstaticがついてないとダメなの?

Java講習の季節なわけですが。

class A{
  class B{}
  static class C{}

  void x(){
    new B();
    new C();
  }

  static void y(){
    new B();// <-これはダメ
    new C();
  }
}

で、x()でのnew B()はいいのにy()でのnew B()がダメなのはどうして?という質問があった。
もちろん「Bにstaticがついてないからダメ」で答えになる話ではなくて、「staticがついてないからダメなのはなんで?」という質問。
「staticがついてないものを使ってるときにはthisが省略されてる」ということからx()は

  void x(){
    this.new B();
    new C();
  }

のthisが省略されているということをベースに説明を進めてみた。

  static void y(){
    A a = new A()
    a.new B();
    new C();
  }

ならOKという感じで。
なかなか楽しかった。