本帖最后由 Jack_Yin 于 2011-09-04 22:33:28 编辑

解决方案 »

  1.   

    你这样看不习惯的话 换个方式
    public static Base getBase(int i)//注意,这个i不是final的
      {
    class Son extends Base
    {
         public Son(int i)
       {
             super(i);
       }
           xxx//其他的就不加了
    }
    return new Son(i);//这里用到的i 不是在内部类中用的
    }
      

  2.   

     new Base(i) 
    这里只是普通的构造函数调用而已,根内部类没有关系,不管在哪儿都是这样调用的。
    并且
    public static Base getBase
    方法的签名为静态,所以在进行方法调用时,不需要实例化对象。
      

  3.   


    匿名内部类,其实是局部内部类的一种特殊形式,匿名内部类是说这个类的只需要一个对象就可以,也说就是说匿名内部类不能在定义它的类的外部使用,所以,上面举的例子再加上一个private就应该跟匿名内部类一样了.如果不加的话,这个内部类实际上是protected,在继承类中还是可以使用的.
      

  4.   

    那我反问你一下 不加private你如何在外面访问这个类
      

  5.   

    还需要修改你一个错误 不加任何访问权限 是包访问级别 不是protect访问级别
    这里带名字的内部类在方法体里面是局部的,你在外面没办法访问,继承也没办法继承
      

  6.   


    你说的对,这个局部内部类在定义它的方法外部是不能访问的,也不能用private,protected public 修饰,而只能用final和abstract修饰.
    还有 不加任何修改表示是包可见.我搞错了,呵呵.