Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Dúvida sobre a segunda questão

Entendi todo o código, só uma dúvida ficou na minha cabeça sobre como funciona aquele construtor na classe InvalidPasswordException que foi usado a palavra-chave "super" que é para se referir a classe mãe. Não entendo como o uso do "super" fez o programa dar certo...

public class InvalidPasswordException extends RuntimeException {
    public InvalidPasswordException(String mensagem) {
        super(mensagem);
    }
}
import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);

        System.out.println("Digite sua senha: ");
        String senha = leitura.nextLine();
        try {
            validarSenha(senha);
            System.out.println("Senha válida. Acesso Permitido");
        } catch (InvalidPasswordException e) {
            System.out.println("Erro: " + e.getMessage());
        }
        
    }

    private static void validarSenha(String senha) {
        if (senha.length() < 8) {
            throw new InvalidPasswordException("A senha deve ter mais do que 8 caracateres");
        }
    }
}
2 respostas
solução!

Oii Enzo, tudo bem?

O super é uma referência à classe mãe. A classe da qual a atual está estendendo. No seu caso, InvalidPasswordException tá estendendo RuntimeException, então super é uma referência à RuntimeException.

Sobre o uso do super no seu construtor. Quando você chama super(mensagem), você tá chamando o construtor da classe mãe (RuntimeException) que aceita uma String como parâmetro. Isso é feito porque RuntimeException usa essa String para definir a mensagem de erro que será exibida quando a exceção for lançada.

Então, quando você lança uma InvalidPasswordException no método validarSenha, passa uma String para o construtor de InvalidPasswordException, que por sua vez passa essa String para o construtor de RuntimeException através do super(mensagem). Isso faz com que a mensagem que passou seja a mensagem de erro que será exibida quando a exceção for capturada no bloco catch.

Para exemplificar, quando a senha tem menos de 8 caracteres, o método validarSenha lança uma InvalidPasswordException com a mensagem "A senha deve ter mais do que 8 caracteres". Essa mensagem é passada para o construtor de RuntimeException através do super(mensagem). Então, quando a exceção é capturada no bloco catch, a mensagem de erro exibida será "Erro: A senha deve ter mais do que 8 caracteres".

Espero ter ajudado.

Um abraço e bons estudos.

Entendii, muito obrigado!!