[英]Java superclass field initialised in subclasses
我有一個帶有私有字段“變量”的 Java 超類,它的所有子類都以相同的方式使用“變量”。 除了在每個子類中,“變量”在初始化時的計算方式不同。 我在哪里最好存儲這個字段以及如何最好地初始化它?
這是我的代碼:
public abstract class SuperClass {
private int variable;
public abstract String getName();
public void printVariable() { System.out.println(variable); }
public int squareVariable() {
variable *= variable;
return variable;
}
}
public class SubClass1 extends SuperClass {
private String name;
public SubClass1(int param) {
name = "SubClass1";
super.variable = param + 1;
// How do I make this better?
}
public String getName() { return name; }
}
public class SubClass2 extends SuperClass {
private String name;
public SubClass2(int param) {
name = "SubClass2";
super.variable = param / 2;
// How do I make this better?
}
public String getName() { return name; }
}
正如你所看到的,現在我使用 super.variable,但是我必須讓“變量”受到保護,這種方法對我來說似乎不是最優的。 這樣做的正確方法是什么? 我應該在超類中定義一個 setter 嗎? 或者我可以在處理這個的超類中定義一個構造函數嗎? 或者我應該分別在每個子類中存儲“變量”嗎? 或者我應該像這樣保持它並保護“變量”嗎?
首先,問題中的代碼無法編譯( The field SuperClass.variable is not visible
),因此它們是不好的例子。
將variable
和name
都存儲在SuperClass
中,並在構造函數中初始化它們。
public abstract class SuperClass {
private String name;
private int variable;
protected SuperClass(String name, int variable) {
this.name = name;
this.variable = variable;
}
public String getName() { return name; }
public void printVariable() { System.out.println(variable); }
public int squareVariable() {
variable *= variable;
return variable;
}
}
public class SubClass1 extends SuperClass {
public SubClass1(int param) {
super("SubClass1", param + 1);
}
}
public class SubClass2 extends SuperClass {
public SubClass2(int param) {
super("SubClass2", param / 2);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.