public class TestClass {
    //......
    class InnerClass {
        InnerClass() {
        }
    }
    //......    public static void main(String[] args) {        TestClass tc = new TestClass();//理解这个没问题。
        tc.new InnerClass();//咋是这样写呢?
/**
 *   能不能帮我解释一下;不太好理解。
 *   "." 和 "new" 哪个先处理(也就是顺序啦)
 *   
 * 下面是错误的,(起先我是认为要这么new的,
 *   //package p does not exist
 *   new tc.InnerClass(); //编译器把tc 做类名了 ft! 
 *   错误提示的有道理;至少要写成下面那种形式;我马上反应过来;
 *   
 *   //an enclosing instance that contains Parcel2.Contents is required
 *   new TestClass.InnerClass();
 *   理解不了了。什么“一个封装的实例 那个 包含 Parcel2.Contents 是需要的"
 *   需要一个包含 Parcel2.Contents 的实例? 那就是tc 啊。
 *   
 */
    }
}

解决方案 »

  1.   

    //an enclosing instance that contains Parcel2.Contents is required
    --------------
    sorry。提示写错了。
    是:  an enclosing instance that contains TestClass.InnerClass is required
      

  2.   

    创建非静态内部类的时候,需要该内部类的outer class的对象在场
    it is not possible to create an object of the inner class unless you already have an object of the outer class
      

  3.   

    Line2D.Double 
    java.awt.geom.Line2D.Double
    可以看看jdk的写法:public class TestClass {
      public static class InnerClass {
        public InnerClass() {
        }
      }  public static void main(String[] args) {
        TestClass tc = new TestClass();
        new TestClass.InnerClass();
      }
    }
      

  4.   

    非常感谢您的回答!哦。。对呀。怎么没有想到呢?呵呵。
    也就是说方法 new TestClass.InnerClass(); 是一定错的了。
    不过我还是不理解:tc.new InnerClass(); 的奥妙所再。
    能解释一下么?
    我在study;我要清楚how to do. 不是 possible不possible;   0_-!!
      

  5.   

    谢谢  CodeFans(痛苦的人);能解释一下这句话么 ?  tc.new InnerClass(); 我不太理解。
      

  6.   

    非静态内部类的实例中有一个隐含的属性,就是包容这个内部类的类的实例的应用(比较拗口,不过你揣摩一下),所以在你创建一个非静态内部类的时候,一定得有一个相应的外面的那个类的一个实例。所以,这样,tc.new InnerClass(); 也就不奇怪了,tc是一个外面类的实例的应用,这样这个内部类的那个隐含的属性的值就可以初始化为tc。
    关于为什么非静态内部类必须持有外面类的某个实例的应用,这是设计模式的问题了
      

  7.   

    TO:faen(发恩)英雄所见略同!
    我在coding的时候刚领悟到。呵呵。
    ok。我知道了。结!