image

Acesso vitalício ao Atalho Secreto + bootcamps ilimitados

86
%OFF
Article image
Thiago Pompeu
Thiago Pompeu29/01/2026 10:51
Share
Microsoft Certification Challenge #5 - DP 100Recommended for youMicrosoft Certification Challenge #5 - DP 100

Um detalhe de herança em Java que pode te pegar desprevenido

  • #Java
  • #Orientação a objetos, classes e métodos

Sabe dizer qual será o output desse código:

class Pai {
  String pai = "Pai";

  public Pai(){
      System.out.println("Construtor " + pai);
      metodo();
  }

  void metodo(){
      System.out.println("Método " + pai);
  }
}

class Filho extends Pai {
  String filho = "Filho";

  void metodo(){
      System.out.println("Método " + filho);
  }
}

public class Teste {
  
  public static void main(String[] args) {
     new Filho();
  }
}

Se você disse:

> "Construtor Pai"

> "Método null"

Parabéns! 🎖️

Esse código parece inofensivo a primeira vista (criação de um Filho que estende Pai)

Mas ao executar -> new Filho();

O que acontece?

1- O construtor da classe Pai é executado primeiro

2- Dentro dele um método sobrescrito é chamado

3- Esse método no construtor Pai, já é do Filho (polimorfismo)

Porém... o estado do Filho ainda não foi inicializado

Seu atributo -> String filho ainda não foi inicializado

Resultado:

-> Campo ainda null

->Estado inconsistente

-> Bug difícil de rastrear

✅ Moral - Evite chamar métodos sobrescritos (override) dentro de construtores

Esse é o tipo de detalhe que diferencia código que funciona de código realmente seguro e previsível.

Você já conhecia esse comportamento?

Já viu algo parecido dar bug em projeto real?

Share
Recommended for you
CI&T - Backend com Java & AWS
PcD Tech Bradesco - Java & QA Developer
Riachuelo - Primeiros Passos com Java
Comments (0)
Recommended for youMicrosoft Certification Challenge #5 - DP 100