Sobes.tech
Middle

Quais são os mecanismos de implementação de polimorfismo existentes em Java?

sobes.tech IA

Resposta da IA

  • Polimorfismo em tempo de compilação (polimorfismo estático): É implementado através da sobrecarga de métodos (method overloading). Os métodos têm o mesmo nome, mas assinaturas diferentes (quantidade, tipo ou ordem dos argumentos).

    class Calculator {
        // Sobrecarga do método add
        public int add(int a, int b) {
            return a + b;
        }
    
        public double add(double a, double b) {
            return a + b;
        }
    }
    
  • Polimorfismo em tempo de execução (polimorfismo dinâmico): É implementado através da sobrescrita de métodos (method overriding). O método na subclasse tem a mesma assinatura que o método na superclasse e fornece sua própria implementação. A decisão de qual método chamar é tomada em tempo de execução, dependendo do tipo real do objeto.

    class Animal {
        public void sound() {
            System.out.println("Animal faz um som");
        }
    }
    
    class Dog extends Animal {
        // Sobrescrita do método sound
        @Override
        public void sound() {
            System.out.println("Cachorro late");
        }
    }
    
    class Cat extends Animal {
        // Sobrescrita do método sound
        @Override
        public void sound() {
            System.out.println("Gato mia");
        }
    }
    
  • Referências à superclasse / interface: Objetos de subclasses podem ser atribuídos a referências de superclasses ou interfaces que eles implementam. Isso permite tratar objetos de diferentes tipos de forma uniforme através de uma referência comum. A chamada de um método sobrescrito através de tal referência resulta na execução da versão do método do tipo real do objeto.

    Animal myAnimal = new Dog(); // Atribuição de um objeto Dog a uma referência de tipo Animal
    myAnimal.sound(); // Chama o método sobrescrito sound() da classe Dog