[英]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
可以有兩個構造函數:
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.