SóProvas


ID
5535889
Banca
CESGRANRIO
Órgão
Caixa
Ano
2021
Provas
Disciplina
Programação
Assuntos

As classes Java a seguir pertencem ao pacote default.
class A1 {
     protected int va1=1,va2=2;
     public A1(int x) {
         va1+=x;
         va2*=x;
     }
}
class A2 extends A1 {
     protected int vb1=10;
}
class A3 extends A2 {
     protected int vc1=0;
     public A3(int y) {
         vc1=(va1+va2)*y;
     }
}
public class Main {
     public static void main(String[] args) {
         A3 o=new A3(2);
         System.out.println(o.vc1);
     }
}
Qual construtor poderá ser inserido na classe A2, sem que um erro de compilação seja gerado?

Alternativas
Comentários
  • Alguns conceitos...

    1) Toda classe deve possuir um construtor. Se não escrevermos, o compilador criará um construtor vazio e sem parâmetro

    2) A primeira instrução dentro de um construtor deve ser um "super([...])", ou seja, uma chamada ao construtor da classe Pai. Caso a classe Pai possua um construtor sem parâmetros, então não precisamos declarar esse super, pois o compilador já faz isso pra gente. Caso não haja um construtor vazio, devemos explicitamente declarar um super na primeira linha passando os parâmetros exigidos

    --------------------------------------------------------------------------

    a) Não possui o super

    b) Se meu A2 tiver esse construtor com parâmetro, vai dar erro lá no A3 que não tem um super que passa esse parâmetro

    c) Super não está na primeira linha

    d) GAB

    e) Não pode usar atributo dentro do super [1]

    .

    [1] "An explicit constructor invocation statement in a constructor body may not refer to any instance variables or instance methods or inner classes declared in this class or any superclass, or use this or super in any expression; otherwise, a compile-time error occurs."

    Fonte de [1]: https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.7.1