Как расширить класс enum из абстрактного класса?

Имея что-то вроде этого:

public enum Token
{
     FOO("foo", "f"),
     QUIT("quit", "q"),
     UNKNOWN("", "");
     ...

     public parse(String s) {
         for (Token token : values()) {
              ...
              return token;
         }
         return UNKNOWN;
     }
}

Абстрактный класс:

abstract class Base 
{
    private boolean run;

    Base() {
        run = true;

        while (run) {
             inp = getInput();
             act(inp);
        }
    }

    public boolean act(String s) {
        boolean OK = true;
        switch (Token.parse(inp)) { /* Enum */
             case FOO:
                    do_foo();
                    break;
             case QUIT:
                    run = false;
                    break;
             case UNKNOWN:
                    print "Unknown" + inp;
                    OK = false;
                    break;
             }
         }
         return OK;
    }
}

И расширитель:

class Major extends Base
{

}

То, что я хочу, это расширитьact как будтоsuper не справиться с этим, то попробуйте справиться с этим вMajor, Например. ДобавлятьPRINT_STAT("print-statistics", "ps") - но в то же время пустьBase дескриптор класса по умолчанию, какQUIT.

Это совершенно неправильный подход?

На данный момент я добавил интерфейс. Обычно:

public interface BaseFace
{
      public boolean act_other(String inp);
}

И в классеBase implements BaseFace:

      case UNKNOWN:
          OK = act_other(inp);

И в классеMajor:

  public boolean act_other(String inp) { 
       if (inp.equals("blah")) {
            do_blah();
            return true; 
       }
       return false;
  }

Похоже ли это на полезный дизайн?

И главный вопрос:

Есть ли хороший способ продлитьToken класс такой, что я могу использовать тот же подход коммутатора вMajor как вBase? Что мне интересно, так это один дизайн лучше, а второй, если мне нужно сделать новый класс Token дляMajor или если я как-то могу расширить или иным образом повторно использовать существующие.

Изменить: Суть концепции заключается в том, чтобы иметьBase класс, который я могу легко использовать в разных проектах, обрабатывая различные типы ввода.

Ответы на вопрос(4)

Ваш ответ на вопрос