1

这不是一个问题,而是一个问题。我有几个类继承了以下抽象类:

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;
    }
}

现在,所有继承的类都有相同的窗口大小,这是最后实例化的任何类型的窗口。我可以通过让另一个类继承这个所有子类都继承的类来修复它,但这比我想要的更混乱。编辑:刚刚意识到我也不能这样做,但是还有很多其他混乱的方法可以解决这个问题。为什么添加一个非静态实例变量会搞砸一切?或者我想一个更好的问题 - 为什么没有非静态实例变量允许它工作?

4

1 回答 1

0

“静态”表示类级别的关联。

非静态意味着对象级别的关联。

基本上,我需要删除所有静态的东西。稍后当您知道为什么需要它时使用“静态”。

于 2013-04-12T01:49:29.523 回答