在这种情况下,如何避免switch语句

Got*_*ank 1 java oop

我想避免使用switch声明,但我不知道如何.这是我的问题:

public class Person{
    String status;

    public void doSomething(){
        switch (status) {
        case "hungry":
                eatSomething();
                status = "full";
            break;
        case "full":
                doNothing();
                status = "hungry";
        default:
            break;
        }
    }}
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

    public abstract class Person{
        public abstract void doSomething();
}

public class HungryPerson extends Person{
        @Override
        public void doSomethink() {
            eatSomething();
        }
}


public class FullPerson extends Person{
    @Override
    public void doSomething() {
            doNothing();
    }   
}
Run Code Online (Sandbox Code Playgroud)

问题是:如果Person他吃了一些东西,那么他必须是FullPerson,但如果我有一个参考,HungryPerson我怎么能改变它FullPerson

int main(){
    Person person = new HungryPerson();
    person.doSomething();
    //I want to person contain a FullPerson reference.
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ano 5

实际上,从面向对象的角度来看,您的第一个实现更好.对象的状态可以更改,但对象本身仍然是同一个对象.即使你饿了或吃完饭,你仍然是同一个人.您可能希望使用Enum而不是字符串作为状态.