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