繼承內部類的構造器問題

字號:

代碼如下:
    class Car {
    class 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);
    }
    }
    調用的是 Car.Wheel 的構造器
    因為 你這個類,是集成自 Car.Wheel而不是 Car.
    同樣,因為你不是單純的集成子Wheel,所以你必須有一個Car的實例,因為Wheel屬于Car。
    以下的幾種情況都是錯誤的
    class Car {
    class Wheel {
    Wheel(int id) { // 不再有默認無參數構造器
    }
    }
    }
    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);
    }
    }
    不寫調用
    class Car {
    class Wheel {
    }
    }
    class PlaneWheel extends Car.Wheel {
    PlaneWheel(Car car) { // 不寫調用,也會出現編譯錯誤
    }
    public static void main(String[] args) {
    Car car = new Car();
    PlaneWheel pw = new PlaneWheel(car);
    }
    }
    class Car {
    class Wheel {
    }
    }
    class PlaneWheel extends Car.Wheel {
    PlaneWheel(Car car) {
    super();// 單純的super,同樣是錯誤的
    }
    public static void main(String[] args) {
    Car car = new Car();
    PlaneWheel pw = new PlaneWheel(car);
    }
    }