La respuesta anterior entiendo que es incorrecta, ya que sí se puede hacer cast de un int a char. Lo que sucede en el segundo caso:
segundoCaracter = (char)(caracter + 1);
es que primero se evalua la suma, y luego se castea a char. Es decir,
caracter + 1 = 66
y luego
(char) 66 = 'B'
Por lo que aquí no habría ningún error. En cambio, en el primer caso:
char segundoCaracter = caracter + ((char)1);
Primero se evalúa
((char) + 1)
que convierte el int '1' al char o caracter número 1 de la tabla ASCII ('☺'). Y luego intenta sumar caracter + '☺'
.
El problema es que caracter ya no es el número 65, sino que ya es interpretado como el caracter 'A''. Entonces:
caracter + '☺' = 'A' + '☺'
Pero esto da error, ya que un char es solo un caracter, no se pueden concatenar dos caracteres como sí se puede en el caso de un String. Si funcionaría si en vez de caracter usáramos directamente el número 65, así:
char segundoCaracter = 65 + ((char)1);
o incluso
int caracter = 65;
y luego
char segundoCaracter = caracter + ((char)1);
En ambos casos hay que tener en cuenta que, como en matemáticas, siempre se resuelve primero lo que está en paréntesis!
Espero te haya quedado clara la explicación, muchos éxitos!