承內(nèi)部類的構(gòu)造器問題

字號(hào):

代碼如下:
    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);
    }
    }
    調(diào)用的是 Car.Wheel 的構(gòu)造器
    因?yàn)?你這個(gè)類,是集成自 Car.Wheel而不是 Car.
    同樣,因?yàn)槟悴皇菃渭兊募勺覹heel,所以你必須有一個(gè)Car的實(shí)例,因?yàn)閃heel屬于Car。
    以下的幾種情況都是錯(cuò)誤的
    class Car {
    class Wheel {
    Wheel(int id) { // 不再有默認(rèn)無(wú)參數(shù)構(gòu)造器
    }
    }
    }
    class PlaneWheel extends Car.Wheel {
    PlaneWheel(Car car) {
    car.super(); // 這里會(huì)出現(xiàn)編譯錯(cuò)誤
    }
    public static void main(String[] args) {
    Car car = new Car();
    PlaneWheel pw = new PlaneWheel(car);
    }
    }
    不寫調(diào)用
    class Car {
    class Wheel {
    }
    }
    class PlaneWheel extends Car.Wheel {
    PlaneWheel(Car car) { // 不寫調(diào)用,也會(huì)出現(xiàn)編譯錯(cuò)誤
    }
    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,同樣是錯(cuò)誤的
    }
    public static void main(String[] args) {
    Car car = new Car();
    PlaneWheel pw = new PlaneWheel(car);
    }
    }