[英]Behavior of static methods/variables change after adding instance variable in Java
這不是一個問題,而是一個問題。 我有幾個類繼承了以下抽象類:
public abstract class PixelEditorWindow {
protected static int windowHeight, windowWidth;
public PixelEditorWindow() {
setWindowSize();
}
protected abstract void setWindowSize();
public static int getWindowWidth() {
return windowWidth;
}
public static int getWindowHeight() {
return windowHeight;
}
}
我讓每個類繼承抽象方法setWindowSize,在其中設置窗口大小,並設置這兩個變量,如下所示:
protected void setWindowSize() {
windowWidth = 400;
windowHeight = 400;
}
那很好。 但是我還需要所有這些元素來跟蹤它們現在包含的JFrame,因此我以以下方式修改了此類:
public abstract class PixelEditorWindow {
protected int windowHeight, windowWidth;
JFrame frame;
public PixelEditorWindow(JFrame frame) {
this.frame = frame;
setWindowSize();
}
public JFrame getFrame() {
return frame;
}
protected abstract void setWindowSize();
public int getWindowWidth() {
return windowWidth;
}
public int getWindowHeight() {
return windowHeight;
}
}
現在,所有繼承的類具有相同的窗口大小,這是最后實例化的任何窗口類型。
我可以通過讓另一個類繼承所有子類都繼承的這個類來解決此問題,但這比我想要的還要混亂。
編輯:剛剛意識到我也不能做到這一點,但是還有很多其他麻煩的方法來解決此問題。 為什么添加非靜態實例變量會使一切變得混亂? 還是我想提出的一個更好的問題-為什么沒有非靜態實例變量可以使它工作呢?
“靜態”是指在班級級別的關聯。
非靜態表示對象級別的關聯。
基本上,我需要刪除所有靜態內容。 然后,當您知道為什么需要它時,請使用“靜態”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.