以下コードを参考書から書いてみたのですが、
何故そうなるのかがどうしても理解できなかったので、
質問させていただきました。

public class Cleric {
 int hp = 50;
 final int MAXHP = 50;
 int mp = 10;
 final int MAXMP = 10;


 public void selfAid() {
  this.mp -= 3;
  this.hp = this.MAXHP;
  System.out.println("HPが最大まで回復した。");
 }

  public int pray(int sec) {
  int r = new java.util.Random().nextInt(2) + sec;

  //以下コード回復量計算

  int recover = Math.min(this.MAXMP - this.mp, r);

  this.mp += recover;
  System.out.println("MPが" + recover + "回復した!");
  System.out.println("現在のMPは" + this.mp + "です。");
  return recover;
 }
}

こちらprayメソッド内の回復量計算における実行結果の理解ができておりません。

こちら定数のMAXMPを超えないようにMPを秒数+乱数分回復するというものです。
そこで不明点ですが、
単にMath.minで比較し、小さい数値を取り出し、
フィールド変数のmpへ加算しているだけであるのに、
定数の値を超えないように何故なっているのでしょうか。

変数に代入しているだけだから、
mpは10を超えても増え続けるのではないかと思っていました。
しかし、実行するとどれだけ回復量を10以上に増やしても
必ず合計が10になる分のみしか増加しないようになっております。

どなたか何故こうなっているのか、
お分かりの方がいらっしゃいましたら教えていただければ幸いです。
宜しくお願いします。