задачу решил так
public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        Person person = null;
        String key = null;

        while(true){
            key = reader.readLine();
            if(key.equals("user")){
                person = new Person.User();
                doWork(person);
            }
            else if(key.equals("loser")){
                person = new Person.Loser();
                doWork(person);
            }
            else if(key.equals("coder")){
                person = new Person.Coder();
                doWork(person);
            }
            else if(key.equals("proger")){
                person = new Person.Proger();
                doWork(person);
            }
            else
            break;
        }
    }


    public static void doWork(Person person) {
        if (person instanceof Person.User){
                ((Person.User)person).live();
            }
            else if (person instanceof Person.Loser){
                ((Person.Loser)person).doNothing();
            }
            else if (person instanceof Person.Coder){
                ((Person.Coder)person).writeCode();
            }
            else if (person instanceof Person.Proger){
                ((Person.Proger)person).enjoy();
            }

    }
}
до этого был следующий вариант. менял только часть в main, dowork был прежним
while(true){
            key = reader.readLine();
            if(key != "user" || key != "loser" || key != "coder" || key != "proger"){
                break;
            }
            else if(key.equals("user")){
                person = new Person.User();
                doWork(person);
            }
            else if(key.equals("loser")){
                person = new Person.Loser();
                doWork(person);
            }
            else if(key.equals("coder")){
                person = new Person.Coder();
                doWork(person);
            }
            else if(key.equals("proger")){
                person = new Person.Proger();
                doWork(person);
            }
        }
почему второй вариант не проходил. не могу понять, что неправильно в цикле?