public class TestNei {
 public class Test1
 {
  public Test1(int i)
  {
  System.out.println(i);
  }
 }
public static void main(String[] args) {
TestNeii tii = new TestNeii();
TestNeii.Test2 tt2 = tii.new Test2(3);
}
}
class TestNeii
{
class Test2 extends TestNei.Test1
{  
public Test2(int i)
{
super(i);
System.out.println("heihei");
}
}
}这个是错的
怎么在内部类中继承另一个内部类

解决方案 »

  1.   

    上面的class不能同时有两个public啊,
      

  2.   

    在同一个文件中不能有两个public 类.只能取一个或者没有public 类的.其次
    内部类可以使用它所在类的静态变量和成员变量,也可以使用它所在类的方法中的局部变量.内部类不允许有继承.
      

  3.   

    虽然这样不符合设计要求,其实是可以继承内部类的,这里所以有问题是由于:在实例化时调用了内部类的构造器,需要调用外围类的构造器。所以必须在代码中强制调用外围类的构造器:class WithInner{
    public WithInner(){
    System.out.println("WithInner Constructor");
    }
    class Inner{
    public Inner(){
    super();
    System.out.println("InnerClass");
    }
    };
    }public class Demo extends WithInner.Inner{
    public Demo(WithInner wi){
    wi.super();
    System.out.println("Demo Contructor");
    }
    public static void main(String[] args) {
    WithInner wi = new WithInner();
    Demo d = new Demo(wi);
    }
    }
      

  4.   


    class WithInner{
    public WithInner(){
    System.out.println("WithInner Constructor");
    }
    class Inner{
    public Inner(){
    super();
    System.out.println("InnerClass");
    }
    };
    }public class Demo {

    public static void main(String[] args) {
    WithInner wi = new WithInner();
    Demo demo = new Demo();
    DemoInner di = demo.new DemoInner(wi);
    }

    private class DemoInner extends WithInner.Inner{
    public DemoInner(WithInner wi){
    wi.super();
    System.out.println("Demo Contructor");
    }
    }
    }
      

  5.   

    答:当然是错误的啦.看来楼主对inner class不大熟悉啊.
    你的代码写错了.
    改为如下就行了(一句话):
    第一种方法:public class TestNei {
         public class Test1
         {
             public Test1(int i)
             {
                 System.out.println(i);
             }
         }
        public static void main(String[] args) {
            TestNeii tii = new TestNeii();
            TestNeii.Test2 tt2 = tii.new Test2(3);
        }    
    }
    class TestNeii extends TestNei  //<===== 加上这一句就行了.
    {
        class Test2 extends TestNei.Test1
        {  
            public Test2(int i)
            {
                super(i);
                System.out.println("heihei");
            }
        }
    }
    即:将TestNeii直接从TestNei继承,这是对你问题的最好的解决方法.
    若你不愿意将TestNeii直接从TestNei继承,则可用另外一个方法,见下例代码:
    第二种方法:public class TestNei {
        public class Test1
        {
            public Test1(int i)
            {
                System.out.println(i);
            }
        }
       public static void main(String[] args) {
           TestNei tii = new TestNei();
           TestNeii tt2 = new  TestNeii(tii,3);
       }    
    }
    class TestNeii extends TestNei.Test1
    {
      
        
           public TestNeii( TestNei outer,int  i)
           {
               outer.super(i);
               System.out.println("heihei");
           }
       
    }
    两种方法,程序的运行结果是一样的.
      

  6.   

    12,13楼正解  12楼多个分号 13楼第二个不是内部类继承的内部类
     还有个方法就是把第一个的内部内变成static的就可以咯