Oi Vinicius
Casting: você só vai tentar "trocar" o tipo da váriavel, mudar o tipo lógico de um valor de um tipo para outro e (normalmente) não altera as informações (existem exceções para o casting entre tipos de número: double para int, por exemplo, jogará fora os dados à esquerda da vírgula decimal, int para byte descartaria todos os valores grandes). Você não pode converter de um tipo para outro, a menos que um seja derivado do outro ou que um operador de conversão específico tenha sido definido para receber os dois tipos. Por exemplo, você não pode converter uma string "1234" em um inteiro 1234
String line = "1234";
int a = (int)line;
// This doesnt work, you'll get an error
Parsing: ler o texto e decidir o que as diferentes partes dele significam. No caso de métodos como Integer.parseInt(String), ele precisa descobrir o que todo o texto String significa e criar um Int baseado nessa String.
String line = "1234";
int a = Integer.parseInt(line);
//This is a perfectly acceptable statement in java