Il javac (ri)compila solo i sorgenti che tu elenchi sulla linea di comando, più tutti i sorgenti delle classi che ciascuna classe referenzia in qualche modo.
Esiste una opzione non-standard -Xprefer che per default vale newer ovvero: Reads the newer of the source or class files for a type. Cioè: se trova anche un .class, tra il .java e il .class viene usato quello più "recente" (dalla data di modifica). Questo generalmente va quasi sempre bene.
Se A.java "usa" B.java e modifichi B, allora javac A.java ricompila entrambi. Ma se B usa A (e NON il contrario) e tu modifichi B ma poi fai solo javac A.java, il B NON viene ricompilato.
E comunque, usare javac "a mano" va bene solo per chi inizia (molto istruttivo) o per cose piccole/veloci da fare. In qualunque altro scenario sarebbe meglio usare un IDE e/o Ant/Maven/Gradle/ecc...