簡體   English   中英

如何設置抽象 class 變量?

[英]How to set abstract class variable?

是否可以使用擴展抽象 class 的默認值 class 設置抽象 class 變量? 我的意思是,如果我有抽象的 class Atrakcja:

public abstract class Atrakcja implements ElementWycieczki{
    private double time;
    public Atrakcja(double time)
    {
        this.time = time;
    }
}

我想通過默認值設置時間變量

public class DrewnianaCerkiew extends Atrakcja{
    private double time = 0.5;
    public DrewnianaCerkiew(){
            ...
    }
}

我知道如果我想將參數放入構造函數,這很容易,只需將參數放入 DrewnianaCerkiew 構造函數,然后 super(param) 就會設置時間。 但在某些擴展 Atrakcja(抽象類)的類中,想要設置默認時間。

我想要做的解決方案之一就是: super(0.5); ,但是還有另一種方法可以為 class 設置默認值嗎? 如果我可以將默認值設置為 class 的變量會更好,例如雙倍時間 = 0.5; 然后 super(time) 但它不起作用。

只有在基類的構造函數中分配變量才有可能:

public abstract class Atrakcja implements ElementWycieczki {
    private double time;
    public Atrakcja(double time) {
        this.time = time;
    }
}

public class DrewnianaCerkiew extends Atrakcja {
    public DrewnianaCerkiew() {
            super(0.5d);
    }
}

將新字段time添加到 class DrewnianaCerkiew會創建一個新成員,該成員不會以任何方式連接到基礎 class 中的字段。 不要這樣做,這很混亂。

如果您正在尋找的只是在 class 定義的頂部擁有所有“默認值”(而不是在超級構造函數調用中內聯),您可以將它們提取為常量:

public class DrewnianaCerkiew extends Atrakcja {
    private static final double DEFAULT_TIME = 0.5d;
    public DrewnianaCerkiew() {
            super(DEFAULT_TIME);
    }
}

擴展“knittl”的答案:

您的 class DrewnianaCerkiew可以有兩個構造函數:

  • 一種使用默認值 (0.5)
  • 另一個允許您傳遞所需值的

public abstract class Atrakcja implements ElementWycieczki {
    private double time;
    public Atrakcja(double time) {
        this.time = time;
    }
}

public class DrewnianaCerkiew extends Atrakcja {
    public DrewnianaCerkiew() {
            this(0.5);
    }
    public DrewnianaCerkiew(double time) {
            super(time);
    }
}

我會將您的問題解釋為“您如何為某些子類而不是其他子類使用字段的默認值?”

請參閱這篇關於構造函數的文章:您可以在父 class 中定義多個構造函數。

然后,對於使用“默認時間”的子類,只需調用默認構造函數(即super()

public class Atrakcja {
    protected double time;
    public double DEFAULT_TIME = 52;
    public Atrakcja(double time)
    {
        this.time = time;
    }

    public Atrakcja()
    {
        this.time = DEFAULT_TIME;
    }

    public static void main(String[] args) {
        DrewnianaCerkiew2 dc2 = new DrewnianaCerkiew2();
        dc2.printTime();
    }
}

只需在子 class 中調用super()

public class DrewnianaCerkiew2 extends Atrakcja {
    public DrewnianaCerkiew2(){
        super();
    }
    public void printTime(){
        System.out.println(this.time);
    }
}

Output 為52.0

暫無
暫無

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

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