class Car
{
class Wheel
{
}
}
class PlaneWheel extends Car.Wheel
{
public static void main(String[] args)
{
PlaneWheel pw = new PlaneWheel();
}
}
这是不能通过编译的,因为我们要产生pw,就必须先产生Car.Wheel的对象,而它是内部类,所以要产生它的对象,就必须先产生外部类的对象,才能建立起内部与外部的引用关系。
因此作出改变:
以下是代码片段:
class PlaneWheel extends Car.Wheel
{
PlaneWheel(Car car)
{
car.super();
}
public static void main(String[] args)
{
Car car = new Car();
PlaneWheel pw = new PlaneWheel(car);
}
}
有哪位大虾能把下面的那段给解释下不???
成员内部类是需要依赖外部类的对象而存在的,第一种情况对于子类PlaneWheel,它的默认构造函数会去初始化super(即Car.Wheel),而初始化Car.Wheel时没有任何方式初始化Car(Wheel必须依赖Car对象的初始化才能被创建);
下面的方式传入了一个Car,使得Car.Wheel初始化时可以依赖传入的car(即car.super()),所以就成功了。
每个内部类都有个指向外部类的引用,所有要想调用内部类的方法,必须先获取这个引用,下面一段代码car就是这个引用,所以car.super()就代表调用父类的构造函数,并且这个父类是car的内部类。
不想有这种引用关系就把内部类改成static class,这样不需要先获取外部类就能直接操作内部类了,世界就清净了。