호출이 선언하는 클래스 자신이 아니라 하위 클래스에 의해 정규화된 내부 클래스 및 중첩 클래스로의 액세스를 보고합니다.

Java는 그러한 정규화를 허용하지만 그러한 액세스는 상속과 재정의가 미묘하게 혼동되고 있음을 나타낼 수 있습니다.

예:


  class Super {
    static class Inner {}
  }

  class Sub extends Super {
    void test() {
      Sub.Inner s = new Sub.Inner(); // 'Inner' 클래스가 'Super' 클래스에서 선언되었으나 'Sub' 클래스를 통해 참조됩니다
    }
  }

빠른 수정을 적용한 후:


  class Super {
    static class Inner {}
  }

  class Sub extends Super {
    void test() {
      Super.Inner s = new Super.Inner();
    }
  }