Использование наследования для определения nxn матриц - PullRequest
0 голосов
/ 08 мая 2018

Я уже написал класс для матриц nxn (я написал это в процессе обработки, но я надеюсь, что идея все еще ясна)

class Matrix {
  float[][] entries;

  Matrix(int n_) {

    n = n_;
    entries = new float[n][n];
  }

  float[][] getEntries() {
    return entries;
  }

  void setEntries(float[][] k) {
    entries = k;
  }
}

но сейчас я хотел бы обобщить для матриц nxm, но хочет сохранить код для вещей, уже написанных для матриц nxn, не меняя его, у меня была идея написать новый класс Gmatrix:

class Gmatrix {
  float[][] entries;
  int row;
  int col;

  Gmatrix(int row_, int col_) {
    row = row_;
    col = col_;
    entries = new float[row][col];
  }

  float[][] getEntries() {
    return entries;
  }

  void setEntries(float[][] k) {
    //  entries = k;

  }
}

но я просто хочу написать что-то вроде row = n, col = n в классе Matrix, как мне это сделать?

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете иметь более общий тип, который принимает оба аргумента. Вот более простой пример:

class RectangularMatrix{
  int rows;
  int columns;

  public RectangularMatrix(int rows, int columns){
    this.rows = rows;
    this.columns = columns;
  }

  public void printRowsAndColumns(){
    println(rows + ", " + columns);
  }
}

Затем более конкретный тип, который расширяет этот класс и принимает только один параметр:

class SquareMatrix extends RectangularMatrix{
  public SquareMatrix(int length){
    super(length, length);
  }

  public void onlyApplicableToSquareMatrix(){
    // put code specific to SquareMatrix here
  }
}

Затем вы можете использовать SquareMatrix везде, где ранее могли использовать RectangleMatrix. Бесстыдная самореклама: здесь - учебник по наследованию.

Но, честно говоря, я не вижу тонны ценности в более конкретном типе. Просто используйте общий тип и передайте правильные аргументы.

...