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

#java #processing

#java #обработка

Вопрос:

Я пытаюсь создать пользовательский класс Matrix в Processing для работы с любым количеством измерений. Класс rotationMatrix является производным от него. Но я не могу получить доступ к методам rotationMatrix, как если бы они не существовали. Мои матричные классы:

 class Matrix{
  float[][] list;
  int[] dims;
  public Matrix(int cols, int rows){
    list = new float[cols][rows];
    dims = new int[] {cols, rows};
    
  }
  void Identity(){
    list = new float[dims[0]][dims[1]];
    for(int v=0;v<min(dims[0], dims[1]); v  ){
      list[v][v] = 1;
    }
  }
  float[] mult(float[] vector){
    if(vector.length!=dims[0]) return vector;
    float[] result = new float[dims[0]];
    for (int i = 0; i<result.length;i  ){
      float d = dot(vector, list[i]);
      result[i] = d;
    }
    return resu<    
  }
  float dot(float[] v1, float[] v2){
    float result=0;
    for(int i = 0; i<v1.length;i  ){
      result =v1[i]*v2[i];
    }
    return resu<
  }
  String toString(){
    String result="{";
    for(int y = 0; y<dims[1]; y  ){
      if(y>0)result =" ";
      result ="(";
      for(int x=0; x<dims[0];x  ){
        result =list[x][y];
        if(x 1<dims[0]) result =",  ";
      }
      result =")";
      if(y 1<dims[1]) result =",nn"; 
    }
    result ="}";
    return resu<
  }
}


class RotationMatrix extends Matrix {
  public float angle, scale;
  int ax1, ax2;
  int dim;
  public RotationMatrix(int dim){
    super(dim, dim);
    ax1=0;
    ax2=1;
    this.dim=dim;

  }
  
  public RotationMatrix(int dim, int a1, int a2){
    super(dim, dim);
    ax1=min(a1, a2);
    ax2=max(a1, a2);
    this.dim=dim;
    
  }

 
  void Update(){
    for(int y = 0; y<dim;y  ){
      for(int x = 0; x<dim;x  ){
        if(x==y) {
          
          if(x==ax1||y==ax2) {
            list[x][y] = cos(angle)*scale;
          }
          else {
            list[x][y]=1;
          }
        }
        else{
          if(x==ax2amp;amp;y==ax1){
            list[x][y]=-sin(angle)*scale;
          }
          if(x==ax1amp;amp;y==ax2) {
            list[x][y] = sin(angle)*scale;
          }
        }
      }
    }
  }
}
  

Теперь используя матрицу вращения:

 m=new RotationMatrix(3);
m.Update();
  

И этот вызов метода обновления выдает ошибку «Функция «Update()» не существует». Что я делаю не так? Я относительно новичок в обработке.
Редактировать: пометка «Обновить» как общедоступной не помогла, перезапуск обработки также.

Комментарии:

1. m не должен объявляться как Matrix (я предполагаю, что это так), но должен быть объявлен как RotationMatrix . У A Matrix нет Update .

2. Если вопрос «решен», то вы должны принять ответ, который его решил, не редактируйте свой вопрос, чтобы включить «решаемый».

3. @Михаил Долгополов стоит знать, что обработка обеспечивает PMatrix2D и PMatrix3D преобразования координат, работающие в сочетании с PVector

Ответ №1:

Во-первых, вы, вероятно, объявили m as Matrix вместо as RotationMatrix . Но Matrix не имеет Update метода, отсюда и ошибка. Вам нужно объявить тип m as RotationMatrix , чтобы исправить это.

Далее, поскольку вы не объявили Update как public , в настоящее время он является закрытым для пакетов. Если вы попытаетесь получить к нему доступ за пределами пакета, в котором RotationMatrix был объявлен, вы получите ошибку, которую вы видите. Объявите метод как public , чтобы исправить это.

(То же самое, вероятно, относится к большинству методов, объявленных в Matrix .)

Комментарии:

1. Я четко написал, как я объявляю m: m=new rotationMatrix(3); m.Update();

2. @MikhailDolgopolov В Java для объявления требуется тип в левой части имени переменной; то, что вы опубликовали, не является объявлением, это присвоение. Какой режим обработки вы используете, который позволяет объявлять переменные без типа? Вы ввели это в REPL?

3. Спасибо! Я забыл изменить тип слева, вы правы. Вопрос решен.