Я работаю над небольшой игрой, но в качестве примера я буду использовать объекты из гипотетического класса Student и объекты из гипотетического класса Books.
У меня есть многомерная сетка, которую я хочу заполнитьили объектами ученика или объектами книги.Может быть, он называется
classroom[][]
и имеет четыре стола:
[0][0], [0][1], [1][0], and [1][1].
Я хочу, чтобы я мог разместить ученика или книгу (никогда оба) и печатать
classroom[0][1].someStudentAttribute
если я знаю, что это студент, или
classroom[0][1].someBookAttribute
, если я знаю, что это книга.
Чтобы быть ясным, это будет очевидно, когда он будет студентом.или книга.Мне не понадобится надежный способ различения, то есть я буду использовать «.someStudentAttribute» только в ситуации, когда в коде определенно учится студент.
Я где-то читалздесь я могу создать многомерный массив, который принимает много типов объектов, объявив переменную типа Object [] [] перед именем.
Student alice = new Student("alice", 10);
Student bob = new Student("bob", 11);
Student charlie = new Student("charlie", 10);
Book mathBook = new Book("mathematics", 578);
Object[][] classroom = new Object[2][2];
classroom[0][0] = alice;
classroom[0][1] = bob;
classroom[1][0] = charlie;
classroom[1][1] = mathBook;
Это возвращает соответствующий класс (ученик класса)
System.out.println(classroom[0][0].getClass());
Это также возвращает правильный класс (книгу классов)
System.out.println(classroom[1][1].getClass()):
Но как только я пытаюсь напечатать атрибут, я получаю ошибку:
System.out.println(classroom[0][0].age);
Ошибкаis:
java: cannot find symbol
symbol: variable age
location: java.lang.Object
Похоже, Java забыл, что
classroom[0][0]
принадлежит классу ученика, как только я спрашиваю его для атрибута!Если
classroom[0][0]
не является правильным способом представления объекта в этом слоте массива, что это такое?
Может быть как-то связано с объявлением переменной как Object [] [], но опять же, дело в том, чтобы иметь возможность помещать объекты из разных классов внутрь.Если бы я просто назвал это студентом [] [], я бы не смог положить в книги.