2016-04-21 2 views
1

У меня есть суперкласса TetrisPiece с подклассами для каждого изменения части, т.е.Сохранение переменного неизвестного типа подкласса в переключателе заявлении

class PieceI extends TetrisPiece{ 
} 

class PieceJ extends TetrisPiece{ 
} 

etc... 

В другом классе у меня есть переключатель заявление на основе случайного числа, создает случайный кусок

switch(rand){ 
     //I 
     case 1: { 
     PieceI pieceI = new PieceI(); 
     break; 
     } 
     //T 
     case 2: { 
     PieceT pieceT = new PieceT(); 
     break; 
     } 
     etc... 
     default: 
     break; 
} 

Мое намерение состоит в том, чтобы извлечь кусок, который генерируется из области действия оператора коммутатора, так что я могу использовать его в дальнейшем в классе.

Метод переключения, очевидно, не работает из-за проблемы с областью действия, и я не могу создать массив суперкласса вне оператора switch, потому что у меня не было бы возможности отображать индексы из-за рандомизации.

Любая помощь приветствуется.

+0

** Как ** вы намерены использовать его позже? 'TetrisPiece piece; ', а затем вы можете назначить экземпляры' PieceI' или 'PieceJ'' '' '. –

+0

Лучшим способом для PieceI и PieceJ является общий интерфейс. –

+0

замените ваш оператор switch полиморфизмом – haifzhan

ответ

1

Создайте экземпляр суперкласса TetrisPiece, а затем назначьте PieceT, PieceI и т. Д. Внутри оператора switch.

TetrisPiece piece; 

switch(rand){ 
    //I 
    case 1: { 
    piece = new PieceI(); 
    break; 
    } 
    //T 
    case 2: { 
    piece = new PieceT(); 
    break; 
    } 
    etc... 
    default: 
    break; 
} 
+0

Проблема заключается в том, что я не могу получить доступ к методам или переменным экземпляра подкласса, которые я присваиваю куску – mrybak3

+0

Существуют ли у ваших типов предметов разные методы и переменные, чем у суперкласса TetrisPiece? Если это так, вы должны следовать более строгой разработке полиморфизма. В идеале TetrisPiece должен быть интерфейсом, который реализует штука. Я предполагаю, что главное, что нужно, чтобы разные фигуры вращали их, поэтому в вашем интерфейсе у вас будет метод поворота, который куски будут отменены. – Darren

+0

Это очень хорошее предложение. Последний вопрос в этом случае. Если бы в каждом подклассе были переопределены методы поворота, и я не использовал явно «кусок», выбор метода переопределения автоматически определяется, какой подкласс, который я присвоил «штуке», правильно? – mrybak3

Смежные вопросы