/**
* 创建日期 2006-3-28
* Written by Terry Yip
* TODO
*
**/
package a;/**
* @author Terry Yip , Date:2006-3-28
*
* TODO
*
*/
class Car
{
Car()
{
System.out.println("Car is running!");
} Car(int age)
{
System.out.println("In Car age = " + age);
} class Wheel
{
Wheel()
{
System.out.println("Wheel is running!");
System.out.println("Wheel is running!2");
} Wheel(int age)
{
System.out.println("In Wheel age = " + age);
}
}
}class PlaneWheel extends Car.Wheel
{
PlaneWheel(Car car)
{
car.super(5);/*这句不明白啊*/
} public static void main(String[] args)
{
Car car = new Car();
PlaneWheel pw = new PlaneWheel(car);
}
}
程序运行的结果是:Car is running!
In Wheel age = 5
为什么car.super(5);这句,调用的是wheel中的构造函数呢?从语法上看,car.super调用的应该是car的超类的构造函数啊
* 创建日期 2006-3-28
* Written by Terry Yip
* TODO
*
**/
package a;/**
* @author Terry Yip , Date:2006-3-28
*
* TODO
*
*/
class Car
{
Car()
{
System.out.println("Car is running!");
} Car(int age)
{
System.out.println("In Car age = " + age);
} class Wheel
{
Wheel()
{
System.out.println("Wheel is running!");
System.out.println("Wheel is running!2");
} Wheel(int age)
{
System.out.println("In Wheel age = " + age);
}
}
}class PlaneWheel extends Car.Wheel
{
PlaneWheel(Car car)
{
car.super(5);/*这句不明白啊*/
} public static void main(String[] args)
{
Car car = new Car();
PlaneWheel pw = new PlaneWheel(car);
}
}
程序运行的结果是:Car is running!
In Wheel age = 5
为什么car.super(5);这句,调用的是wheel中的构造函数呢?从语法上看,car.super调用的应该是car的超类的构造函数啊
由于你继承的是内部类,所以你必须要用外部实例来初始化它.
你可以把它当作特定的语法使用就好啦.
因为Nested class是有偏移的,在访问Nested class的时候要把偏移加上, 如果你直接调用super(),这样 编译器就回认为直接调用无偏移的父类,可是Nested class是有偏移的, 所以,需要加个偏移在前面.
引用:父类不是外部类.因为你的继承的特殊,继承了一个Nested class, 你可以把Nested class看做一个成员类.成员类是需要有外部类的偏移的, 或这样理解:所有类都在同一起点, 而Nested class是有偏移的, 所以, 在访问Nested class的时候要把偏移加上, 如果你直接调用super(),这样 编译器就回认为直接调用无偏移的父类,可是Nested class是有偏移的, 所以,需要加个偏移在前面.至于内存的分配状况[1]参见inside JVM [2]JSR203 =============================================================================请问这段话从哪里能找到呢?