Java Can';不调用子类中的状态?

Java Can';不调用子类中的状态?,java,enums,Java,Enums,我尝试调用我在主类中创建的状态,然后在子类中调用它,它对一个子类有效,但对另一个子类无效。我的主要类叫做MonGame,使用状态的子类是Keying和MouseInput。我将键控函数分别放在keying类中,将鼠标侦听器函数放在MouseInput中。因此,在MonGame(我的主类)中,我声明: public static enum STATE{ MENU, BATTLE, FEED, PET, AGE } public static STATE State

我尝试调用我在主类中创建的状态,然后在子类中调用它,它对一个子类有效,但对另一个子类无效。我的主要类叫做MonGame,使用状态的子类是Keying和MouseInput。我将键控函数分别放在keying类中,将鼠标侦听器函数放在MouseInput中。因此,在MonGame(我的主类)中,我声明:

public static enum STATE{
        MENU, BATTLE, FEED, PET, AGE
    }

    public static STATE State = STATE.MENU;
在MouseInput(很好用)中,我写下:

@Override
public void mousePressed(MouseEvent e) {
int mx = e.getX();
int my = e.getY();

//battleMenu
if (mx >= 190 && mx <= 250){
    if (my >= 290 && my <= 310){
        MonGame.State = MonGame.STATE.BATTLE;
    }
}
//feedMenu
if (mx >=320 && mx <= 360){
    if (my >= 290 && my <= 310){
        MonGame.State = MonGame.STATE.FEED;
    }
}
//petMenu
if (mx >= 200 && mx <= 240){
    if (my >= 320 && my <= 340){
        MonGame.State = MonGame.STATE.PET;
    }
}
//ageMenu
if (mx >= 325 && mx <= 345){
    if (my >= 320 && my <= 340){
        MonGame.State = MonGame.STATE.AGE;
    }
}
但是它返回了一个错误

(State)
在if语句中

我尝试将枚举和状态值放入Keying类,然后在MouseInput类中得到一个错误。将它们向上切换不起作用,那么如何将enum和State值同时放入这两个子类中呢?我甚至尝试导入我所有的主类

public void Battle(){
    if (MonGame.State == STATE.BATTLE){
    }
}

您缺少状态的
MonGame.
前缀。

如果您看到错误,发布错误消息是有意义的,不是吗?您似乎试图在战斗中引用未声明的变量,但这只是猜测。一个更大的问题是为什么你的鼠标和你的按键控件类会成为主类的子类?这看起来像是对继承权的滥用。我很抱歉。错误是“状态无法解析为变量”。所以我想你是对的,但我对这件事几乎一无所知。我以为状态会被键控类继承,因为我在主类中声明了它?同样,更大的问题是,你的按键控件和鼠标控件类很可能不应该从主类派生。再次,这看起来是对继承的严重滥用。如果你看到整个软件包,你可能会感到恶心,哈哈。我只是在学习观察其他人,看看其他人做了什么,然后在这里发问:/谢谢你,尽管如此!:)在我继续之前,我将尝试在包方面使一切都井然有序。更重要的是,只有当存在有效的“is-a”关系时,才应该使用继承。狗是一种食肉动物,也是一种动物。如果此关系不存在,则不应使用继承。一个键控制器类不能满足这种关系,如果你试图强迫它进入这种关系,你的程序很可能会崩溃。哇。嗯,这就澄清了错误,哈哈。我现在觉得自己很傻:$我们所有人都会犯这些错误。接受答案!(:@Codereaper:叹气,当然,忽略我的评论,但我担心你会后悔。这个答案解决了你的问题,但没有解决你的程序结构可能存在的一个大问题。@HovercraftFullOfEels很好,公平地说,我回答了:/花了我一段时间。在Oracle上有没有一个页面可以让我了解继承的问题nd如何构造我的类,以及什么样的类应该被子类化?@Codereaper:。我建议你买几本关于面向对象设计的好书。
public void Battle(){
    if (MonGame.State == STATE.BATTLE){
    }
}