Вы можете иметь более общий тип, который принимает оба аргумента. Вот более простой пример:
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
. Бесстыдная самореклама: здесь - учебник по наследованию.
Но, честно говоря, я не вижу тонны ценности в более конкретном типе. Просто используйте общий тип и передайте правильные аргументы.