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

Dúvida no Ex. 1 da Aula 4 - Diferença entre o construtor padrão e construtores definidos pelo usuário

class A {
    final String n;
    A() {
        a();
        n = "aprendendo";
    }
    void a() {
        System.out.println("testa");
    }
}
class B extends A {
    void a() {
        System.out.println(n.length());
    }
    public static void main(String[] args) {
        new B();
    }
}

A classe B, possui um construtor default, certo?

B(){
    super()
}

Então, no método main, quando eu crio um novo objeto B, eu chamo o construtor de A e, neste ponto, a classe A já não foi carregada? Já não existe a String n igual a null?

Abs!

2 respostas
solução!

Sim, existe a String n igual a null, mas perceba que o método a() está sendo sobreescrito, e a execução é sempre da classe mais especializada, no caso a Classe B, assim o método chamado é:

void a() {
   System.out.println(n.length());
}

como n == null, vai ocorrer uma exceção ao executar n.length()

Muito obrigado João!!!

Estou usando o Vim para não ter, de antemão, as ajudas do eclipse. Para eu mesmo tentar saber se vai compilar, se vai lançar Exception, etc. No entanto, rodei o código no debug do eclipse e vi acontecer o que você explicou acima. De fato, ele chama o método sobreescrito na classe B.

Obrigado, mais uma vez !

Abs!