"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > As subclasses Java sempre precisam chamar explicitamente o construtor da superclasse?

As subclasses Java sempre precisam chamar explicitamente o construtor da superclasse?

Publicado em 2024-11-09
Navegar:340

Do Java Subclasses Always Need to Explicitly Call the Superclass Constructor?

Você deve chamar explicitamente o construtor de superclasse em subclasses Java?

Ao definir uma subclasse, é uma prática comum ver construtores que chamam explicitamente o construtor de superclasse usando super(). No entanto, pode-se questionar se isso é necessário.

O super() é adicionado automaticamente pelo compilador?

Sim, se o construtor da subclasse omitir uma chamada para a superclasse construtor, o compilador chamará automaticamente o construtor sem argumentos acessível (construtor sem argumentos) na superclasse. Esse comportamento padrão é conhecido como encadeamento de construtor.

Tipos de construtores

  • Construtor sem argumentos: Um construtor sem parâmetros.
  • Construtor sem argumentos acessível: Um construtor sem argumentos no superclasse que é visível para a subclasse (pública, protegida ou pacote privado).
  • Construtor padrão: O construtor público sem argumentos adicionado pelo compilador quando não há construtor explícito em a classe.

Quando super() é obrigatório?

Usar super() explicitamente só é obrigatório if:

  • A superclasse não possui um construtor sem argumentos acessível.
  • O construtor da subclasse inclui parâmetros, caso em que deve chamar explicitamente um construtor na superclasse que os aceita parâmetros.

Exemplo 1:

public class Base {}
public class Derived extends Base {}

Nenhuma chamada explícita para super() é necessária porque Base tem um construtor padrão.

Exemplo 2:

public class Base {
    public Base(int i) {}
}
public class Derived extends Base {
    public Derived(int i) {
        super(i); // Explicitly call the Base(int) constructor
    }
}

Nesse caso, super(i) é necessário porque a superclasse não possui um construtor sem argumentos e o construtor da subclasse precisa fornecer um valor inicial para seu parâmetro i.

Ao compreender esses conceitos, você pode evitar chamadas super() desnecessárias e garantir o encadeamento adequado do construtor em suas subclasses.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3