2012-04-30 3 views
3

Мне нужно создать массив ссылок на дочерние объекты. В этом случае номер должен иметь массив ссылок на объекты: DarkRoom и LightRoom. Ошибка в строке, где инициализация массива типа Room. Чего не хватает?Массив ссылок на дочерние объекты не удалось инициализировать

public abstract class Room { 

    public Room[][] space = new Room[4][4]; // <<Syntax error on token ";", 

    space[0][0] = new DarkRoom(); 
    space[0][1] = new LightRoom(); 
    space[1][0] = new DarkRoom(); 
    space[1][1] = new LightRoom();    
} 

public class LightRoom extends Room { ... } 

public class DarkRoom extends Room { ... } 
+0

Следующие строки неверны. Поместите один метод! –

ответ

6

Ваш дизайн путь от марки. Класс не должен содержать массив дочерних объектов и на самом деле не должен знать или зависить от его дочерних классов. Это и рекурсивный, и логический кошмар.

Я предлагаю вам удалить массив из класса Room в другое место, например, в класс отеля или класс House.

+1

+1 смешно, не ответил на вопрос, но лучший ответ здесь :) – MByD

+2

Конечно, лучшее долгосрочное решение, чем исправление синтаксиса. – Thomas

4

инициализации не должно быть сделано за пределами блока инициализации или метода, вместо этого, сделать:

public Room[][] space = new Room[4][4]; 
{ 
    space[0][0] = new DarkRoom(); 
    space[0][1] = new LightRoom(); 
    space[1][0] = new DarkRoom(); 
    space[1][1] = new LightRoom(); 
} 
+0

У брекетов определяется тело конструктора комнаты? –

+1

Нет, блок инициализации. – MByD

4

Жалоба на пространство [] [] блоков. Вы не можете просто написать код в определение класса.

public abstract class Room { 

    public Room[][] space = new Room[4][4]; // << error Syntax error on token ";", 

    public Room() 
    { 
    space[0][0] = new DarkRoom(); 
    space[0][1] = new LightRoom(); 
    space[1][0] = new DarkRoom(); 
    space[1][1] = new LightRoom(); 
    } 
    } 
Смежные вопросы