Я переписал на if и instanceof, но всё равно интересует вопрос почему такой вариант неверен?
package com.javarush.task.task14.task1411;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/*
User, Loser, Coder and Proger
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Person person = null;
String key;
while (true) {
key = reader.readLine();
if (!(key.equals("user") || key.equals("loser") || key.equals("coder") || key.equals("proger"))) break;
switch (key) {
case "user" : person = new Person.User();
break;
case "loser" : person = new Person.Loser();
break;
case "coder" : person = new Person.Coder();
break;
case "proger" : person = new Person.Proger();
break;//создаем объект, пункт 2
}
doWork(person);
}
}
public static void doWork(Person person) {
switch (person.getClass().getSimpleName()) {
case "User" : ((Person.User) person).live();
break;
case "Loser" : ((Person.Loser) person).doNothing();
break;
case "Coder" : ((Person.Coder) person).writeCode();
break;
case "Proger" : ((Person.Proger) person).enjoy();
break;
}
}
}