Vamos analisar o que está acontecendo:
primeira alternativa
B. Set the current directory to xcom then invoke
javac -classpath . B.java
C:\Projetos\foo\test\xcom>javac A.java
C:\Projetos\foo\test\xcom>javac -classpath . B.java
B.java:2: cannot find symbol
symbol: class A
public class B extends A { } →
^
1 error
Veja que o classpath foi setado para xcom, sendo assim a procura será feita por uma classe que tenha a entrada seguinte:
xcom.A, ou seja dentro de xcom, não tem um pacote xcom, o que você tem que entender é que existe uma declaração package, e sendo assim a entrada para o classpath teria que ser xcom.A, o compilador está procurando o pacote xcom dentro de xcom, o qual tem um A!, ele pensa assim:
Estou dentro de xcom e encontrei um ".", vou procurar o que é preciso para compilar, preciso de uma classe chamada "xcom.A", vou começar entrando dentro de um pacote chamado "xcom", opa não existe nenhum pacote chamado xcom!, vou lançar uma exeção. dizendo que não consegui encontrar o simbolo "A", pois não existe esse caminho!
A mesma coisa está acontecendo nas outras alternativas!
Agora o teste que você fez é diferente, você não colocou um package na declaração da classe, e ae pediu para procurar com classpath local, ae deu certo, veja que são situações distintas.
Qualquer coisa pergunte.