Buongiorno e buona pasqua,

prendendo in considerazione un programma (java) che prende due matrici e stampa a video il prodotto di queste due.
L'idea era quella di creare una classe che mi permettesse di fare la seguente operazione:

public static void main(String args[]){
Matrice A = new Matrice();
Matrice B = new Matrice();
Matrice C = new Matrice();

C.Moltiplica(A,B);
}

dove C, A, B, sono oggetti della classe Matrice fatta nel seguente modo:

public class Matrice{
private int[][] M;
private int row;
private int column;

...
costuttore..
....
public void Moltiplica(Matrice A,Matrice B){
for (int i=0;i<A.GetMatrixRow();i++) {
for (int j=0;j<B.GetMatrixColumn();j++) {
for (int k=0;k<A.GetMatrixColumn();k++) {
M[i][j]+=(A.GetMatrixElement(i,k))*(B.GetMatrixElement(k, j));
}
}
}
}
....
}

dove GetMatrixRow() GetMatrixColumn() fanno quello che uno si aspetta, cioè restituiscono il numero di righe o di colonne dalla matrice dentro l'oggetto che chiama il metodo.
Mentre GetMatrixElement(i,j) restituisce l'elemento nella posizione [i,j] della matrice all'interno della classe.

La mia domanda è la seguente:
Secondo la giusta programmazione è corretto riferirsi a oggetti e quindi metodi diversi dalla classe diversa da quella in cui mi trovo in quel momento? È corretto come ho implementato il metodo Moltiplica() ?

L'idea, come ho detto prima, era quella di semplificare la main C.Moltiplica(A,B);