У меня есть класс модели с подклассом под названием квадратВ модельном классе у меня есть метод draw, которому нужны некоторые поля из подкласса.У меня есть экземпляр подкласса, и я хочу вызвать его функцию рисования (которая не должна быть переопределена в подклассе).
Я пытаюсь сделать что-то, используя openGL на Android, и у меня есть много моделей, которыеиспользовать по существу один и тот же код для рисования, но использовать разные сетки, поэтому иметь разные поля.Я думаю, что немного избыточно копировать функцию рисования в каждый отдельный класс модели, и когда я пытаюсь просто добавить пустые поля в классе модели и поля с тем же именем в подклассе, он использует поля из суперкласса при вызовеметод, использующий экземпляр подкласса, также, передача полей в качестве параметров не является опцией, так как вызов конструктора super должен быть первым вызовом в конструкторе подкласса, и мне нужно применить некоторые операции к полям в подклассе.'конструктор (я думаю, у меня нет опыта работы с ООП, как вы можете сказать).
Многое из следующего является временным, так как я все еще пытаюсь разобраться с вещами
.суперкласс модели:
abstract public class Model {
static final int COORDS_PER_VERTEX = 3;
final float Coords[];
public Model(){
//do some stuff unrelated to the issue
}
public void draw(){
final int vertexCount = Coords.length / COORDS_PER_VERTEX;
}
}
урезанный подкласс модели:
public class Square extends Model{
private static float Coords[] = {
-0.5f, 0.5f, 0.0f, // top left
-0.5f, -0.5f, 0.0f, // bottom left
0.5f, -0.5f, 0.0f, // bottom right
0.5f, 0.5f, 0.0f }; // top right
public Square() {
super();
//do something to Coords
}
}
вызов метода:
private ArrayList<Model> models = new ArrayList<>();
models.add(new Square());
for (Model model:models) {
model.draw();
}
Я ожидаю, что функция draw будет использовать значение 12/3= 4 для vertexCount, но вместо этого возникает ошибка NullPointer, потому что вы не можете использовать .length
для нулевого массива.