簡體   English   中英

在Java中添加實例變量后,靜態方法/變量的行為發生變化

[英]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.

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