簡體   English   中英

如何繞過Super class構造函數參數

[英]How to bypass the Super class constructor parameters

我剛剛開始了解抽象 class。

我從一些編碼測試中看到了這個抽象的 class 問題。 我已經對 object Wagon的啟動方式感到困惑。

正如Vehicle摘要 class 中所見,其構造函數僅包含兩個參數 - isSedanseats

其中一項要求是創建Wagon class。但是,如主要內容(由問題提供)所示, Wagon object 改為使用new Wagon(1000)啟動,其中缺少isSedan和 seats 值。

我嘗試編寫我的 wagon class,但是,如果不更改主 class 中的給定上下文,我無法繞過isSedanseatssuper參數。我試圖通過 google 獲取更多信息,但找不到任何答案。

有好心人可以賜教嗎?

abstract class Vehicle {
    protected boolean isSedan;
    protected String seats;

    public Vehicle(boolean isSedan, String seats) {
        this.isSedan = isSedan;
        this.seats = seats;
    }
}

class Wagon extends Vehicle {
    public Wagon(boolean isSedan, String seats) {
      super(isSedan, seats);
    }

    // I need to write out both the super params and the mileage params, however this will not work too    
    // public Wagon(boolean isSedan, String seats, int mileage) {
    //   super(isSedan, seats);
    //   this.mileage = mileage;
    // }    
    // public Wagon(int mileage) {
    //   this.mileage = mileage;
    // }
    // public int getMileage() {
    //   return this.mileage;
    // }
}

class Main {  
  public static void main(String args[]) { 
    // 1000 is the mileage
    Wagon w = new Wagon(1000);
  } 
}

超級 class super()的構造函數的調用必須作為子類構造函數的第一行顯式或隱式出現。 也就是說,每次創建子類的實例時,都會實例化其父類 class的 object,以及其父類的父類,依此類推, Object class。

注意:在子類的構造函數使用關鍵字this()調用另一個重載構造函數的情況下,調用super()只需要出現在使用this()調用的最后一個構造函數中。

在這種情況下,parent class Vehicle只聲明了一個構造函數,它需要兩個 arguments。這意味着編譯器不會生成參構造函數。 因此,編譯器將無法向Wagon class 的構造函數添加隱式調用super()

也就是說,需要顯式添加對Vehicle class 的構造函數的調用,並且您需要按預期准確傳遞兩個 arguments。 沒有辦法繞過它

沒有什么特定於abstract類,這就是所謂的構造函數鏈在 Java 中起作用。

但是,子 class構造函數與它調用的構造函數采用不同數量的 arguments 並沒有錯。

您可以通過將true傳遞給 parent 的構造函數來實現僅采用坐數的Wagon構造函數:

public Wagon(String seats) {
    super(true, seats);
}

我猜你遇到的代碼中不小心遺漏了這個構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM