簡體   English   中英

Java子類在構造函數中減少了1個參數

[英]Java subclass takes 1 less argument in the constructor

我正在編寫一個簡單的程序,以Java fx顯示人員卡號,姓名和限額。 我怎樣才能使子類在其構造函數中繼承一個更少的參數? 我有2種不同的卡類型,無限制的借記卡和創建對象時會給以限制的信用卡。

public AccountData(String id, String name, int limit) {
    this.id = id;
    this.name = name;
    this.limit = limit;
}

因此,當創建擴展AccountData的借記卡子類時,我不需要limit參數,因為它沒有一個。

先感謝您。

干凈的方法是將limit排除在AccountData類之外(因為這顯然不是常見屬性),而僅將其引入您的信用卡類中:

public class AccountData {
    private String id;
    private String name;

    public AccountData(String id, String name) {
        this.id = id;
        this.name = name;
    }
}

public class CreditCardAccountData extends AccountData {
    private int limit;

    public CreditCardAccountData(String id, String name, int limit) {
        super(id, name);
        this.limit = limit;
    }
}

如果您要堅持當前的方法,則可以向AccountData類添加第二個構造函數,例如,將limit設置為默認值(也許是Integer.MAX_VALUE-1 ,盡管前者似乎更合適):

public AccountData(String id, String name) {
    this(id, name, Integer.MAX_VALUE);
}

我有2種不同的卡類型,無限制的借記卡和創建對象時會給以限制的信用卡。

那么,大概CreditCardDebitCardAccountData類型的子類。 因此,將limit設置為CreditCard子類的屬性,而不是AccountData的屬性:

class AccountData {
  AccountData(String id, String name) { ... }
}

class CreditCard extends AccountData {
  CreditCard(String id, String name, int limit) {
    super(id, name);
    this.limit = limit;
  }
}

class DebitCard extends AccountData {
  DebitCard(String id, String name) {
    super(id, name);
  }
}

只需在超類中為借記卡添加另一個構造函數,該構造函數需要較少的參數

只需編寫一個帶有較少參數的新構造函數,如下所示:

class DebitCard extends AccountData {

 public DebitCard(String id, String name) {
    super(id, name, Integer.MAX_VALUE);
 }

}

從概念上講,我建議對設計進行重新設計,因為讓一個子類具有不同的繼承成員集而另一個子類具有不同的繼承同一個父類並不是一個好主意,但是對於自組織而言,我可以建議在AccountDataCreditCard類中設置private int limit 這樣,您可以保護自己的成員。 如果您只有一個帶有較少參數的構造函數,則會產生問題。 因為,如果limit是公共的,則可以從DebitCard類訪問它,因為它將繼承。 因此,最好對AccountData和CreditCard類都設置私有int限制。

暫無
暫無

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

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