package p2;
public class C1 {
  protected static class C2 {
    void fun1() {}
  }
}
//T1.java
import p2.*;
public class T1 extends C1 {
  C1.C2 fun2() { return new C1.C2(); }
}

解决方案 »

  1.   

    我觉得是 C1.C2 fun2() 中的C1.C2的问题,试问一个inner class怎么能成为一种type用来声明一个函数的返回值呢?
    可以在外部定义一个和inner class一样的class来代替C1.C2作为fun2()返回值的类型试试看。
    我在外面上的网,没有JDK,楼主试的结果告一声,谢谢。
      

  2.   

    关注,关注,不知道下面的做法可否。
    public class T1 extends C1.C2 {
      C1.C2 fun2() { return new C1.C2(); }
    }
      

  3.   

    丁丁:用C1.C2作为返回类型是可以的,我把C1放进T1.java里,就能够通过编译。另外,在class C2前加static也没有任何效果,连报的错误都一模一样
      

  4.   

    package com;public class C1
    {
    protected C2 getC2()
    {
    return new C2();
    }
    protected  class C2 
             {
      void fun1() {}
    }
    }
    //T1.java
    import com.*;
    public class T1 extends C1
    {
       C2 fun2() 
       {
       return this.getC2(); 
       }
    }
    根据java的语法Protected是不能在继承类中“访问“的。
    Access outside of a package:
                Access Modifier            Inherited Accessible 
    default (no modifier) No                       No 
    Public                Yes                      Yes 
    Protected             Yes                      No 
    Private               No                       No
      

  5.   

    好象放在一个文件里是可以的,就是这样,是可以的。
    class C1
    {
    protected  class C2 
             {
      void fun1() {}
    }
    }
    public class T1 extends C1
    {
             C1.C2 fun2() { return new C1.C2(); }
    }
      

  6.   

    protected  class C2 该为 static  class c2
      

  7.   

    上面各位的方法我都试了,结果如下:protected  class C2 该为 static  class C2,由于C2是friendly权限,虽然是static,也无法在package外使用protected方法可以在派生类中使用,无需通过this调用,因为派生类已经继承了父类的所有方法和数据。sandrowjw(Sandro):说说你怎么通过编译的,是在C1和T1不在同一个包的情况下编译通过的吗?
      

  8.   

    return (new C1).new C2();
    呵呵……
      

  9.   

    return (new C1()).new C2();
    呵呵……
      

  10.   

    return (new C1()).new C2();并不能解决问题,C2依然会报错