class Car{
class Wheel{

}
}class PlaneWheel extends Car.Wheel{

PlaneWheel(Car car){
 car.super();//这里的super不是调用父类的构造函数吗?car.super不是调用car的父类了啊?
}
public static void main(String[] args){
Car car = new Car();
PlaneWheel pw = new PlaneWheel(car);
}
}

解决方案 »

  1.   

    car.super();//这里的super不是调用父类的构造函数吗?car.super不是调用car的父类了啊? 
    car.super();
    调用的是car的父类的构造方法
    如果car没有父类,那调用的是Object类的构造方法
    Object类是所有Java类的祖先。每个类都使用 Object 作为超类。
      

  2.   

    http:// 说的有道理·~~~~~
      

  3.   

    调用的是 Car.Wheel .
    car.super();//这里的super不是调用父类的构造函数吗?car.super不是调用car的父类了啊?
    外表看来是的,其实并非如此.实际上调用的是 PlaneWheel .
    具体解释不清楚,楼主硬记吧.
      

  4.   

    由于内部类构建器必须同封装类对象的一个句柄联系到一起,所以从一个内部类继承,需要创建一个构建器的时候,默认对象已经没有意义,不能只是传递封装对象的一个句柄。必须在构建器中采用下述语法:
    enclosingClassHandle.super();
    它提供了必要的句柄,以便程序正确编译。
    内部类中隐藏一个outer指针$this,指向外围类的对象。
    用java反射分析类结构时,wheel会被解析成car$wheel
      

  5.   

    mtv0119说的不错,一个内部类是他外部类的成员,即wheel是car的一个成员,那么如果想要得到这个内部类的实例,必须通过它外部类的实例获得,所以说如果想要调用planewheel的父类的构造方法,必须要有一个wheel的外部类实例作为句柄才可以构造,
    另外通过运行程序,car。super()却是调用的是wheel的构造方法
      

  6.   

    比如说你想要建立一个内部类的对象,必须这样才可以
    class A
    {
       class B{}
    }
    A a = new A();
    A.B b = a.new B();
    这个和你所遇到的问题有点类似 类比一下即可
    如果想要创建某个外部类的内部类的一个对象,就需要提供此外部类的一个实例的引用
    然后用此引用. new 一个内部类对象,即为必须用外部类对象区创建内部类对象,
    不能在没有创建外部类实例之前去实例化一个内部类对象。
      

  7.   

    孙鑫的JAVA教学视频?
    对于PlaneWheel,Car中的Carwheel类是不可见的,所以你的extends 是Car.Wheel。
    Car.super()是调用的Car的构造方法,即产生一个Car对象,让PlaneWheel和Wheel类建立联系。
    (还有好多你都删除了,不懂再看看视频,嗯嗯,就这样)
      

  8.   

    car.super()就是让Car类和PlaneWheel类产生关联关系嘛,要有Car类实例才能用里面的内部类的,所以要在PlaneWheel的构造函数中传入Car 的参数。学习中~~有什么说的不对请指出~~
      

  9.   


    还没明白么,再补充下。this是一个对象指针,可以指向一个对象。但super与this不同,只是告诉编辑器调用父类方法或构造器,并不是一个指针。可以用this给一个对象附值,可以return this,但绝对不能用super给对象附值或return super。
    car.super(),可以分两步理解。car提供一个句柄,用于通过外围类找到内部类,super,提示调用父类构造器。
    另外,java中点运算符“.”的功能有两个:一是引用类中成员,二是指示包的层次等级。 
    这里应该表示的是层次等级。
      

  10.   

    car.super();
    这句话的意思是:先拿到外围类的引用,再初始化内部类的构造器。
    就好比,我们在创建内部类对象时的语法:
    Car car = new Car();
    Car.Wheel cw = car.new Wheel();
    "c.new Wheel" 也是用  "外围类引用."的这种语法。
    同样的如果你要初始化内部类的构造器,也得遵循  "外围类引用.super();"的语法,这样程序才能编译通过。
    一句话,car.super()指向的就是内部类的构造器。
    如果你的内部类Wheel有一个参数,那么在导出类构造器里的得写成 :car.super(参数);