public class Outer{
  class Inner extends Outer{}
  class Inner1 extends Inner{}
}
public class Outer{
  class Inner {}
  class Inner1 extends Inner{}
}上面两段代码中,第一段代码编译出错,第二段能够正常编译!为什么只是Inner没有继承Outer就会有这样的差异?这两个程序到底有什么区别?很迷惑,求解答!

解决方案 »

  1.   

    public class Outer{
      class Inner extends Outer{}
      class Inner1 extends Inner{}
    }
    因为java不实现多继承
    ====================================================
    public interface Interface1 {
    interface Interface2 extends Interface1{}
    interface Interface3 extends Interface2{}
    }
    ====================================================
      

  2.   

    第一段代码出现错误不是由于多重继承引起的,而是因为内部类的构造器中对超类构造器的调用不正确,第一段代码如果改成下面的样子就能编译通过:public class Outer{
      class Inner extends Outer{}
      class Inner1 extends Inner{
        public Inner1()
        {
           Outer.this.super();
         }
       }
    }在这里,使用上面的方式“Outer.this.super();”调用超类的构造器才能编译通过!但是如果Inner不继承自Outer类,Inner1中的构造器就无须这样的方式调用超类的构造器!但这两者之间到底是什么原因呢?为何Inner继承自Outer以后,Inner1中就必须显示的传递外部类的实例来调用超类的构造器;若Inner不是继承自Outer,就无须显示的传递外部类实例来调用构造器..求大神解释啊!
      

  3.   

    比较有趣的问题,搜出来一个比较古老的帖子。
    http://topic.csdn.net/t/20030830/13/2205562.html
    建议看一下。