O que é: Overriding

O que é Overriding?

Overriding é um conceito fundamental na programação orientada a objetos (POO) que permite que uma classe filha substitua um método da classe pai, fornecendo uma implementação diferente. É uma forma de polimorfismo, onde um método com o mesmo nome e assinatura é definido tanto na classe pai quanto na classe filha, mas a implementação na classe filha é executada quando o método é chamado.

Como funciona o Overriding?

Quando uma classe filha herda de uma classe pai, ela também herda todos os métodos da classe pai. No entanto, se a classe filha precisar modificar o comportamento de um método herdado, ela pode fazer isso usando o conceito de overriding. Para fazer isso, a classe filha redefine o método com a mesma assinatura, mas com uma implementação diferente.

Assinatura do método

A assinatura de um método inclui o nome do método e os tipos e ordem dos parâmetros. Ao fazer overriding de um método, a assinatura do método na classe filha deve ser exatamente a mesma que a assinatura do método na classe pai. Isso significa que o nome do método, o número e tipo de parâmetros devem ser idênticos.

Modificadores de acesso

Quando se trata de overriding, os modificadores de acesso também são importantes. A classe filha pode substituir um método da classe pai apenas se o método na classe pai for declarado como público ou protegido. Se o método na classe pai for declarado como privado, ele não pode ser substituído pela classe filha.

Exemplo de Overriding

Vamos considerar um exemplo para entender melhor o conceito de overriding. Suponha que temos uma classe chamada Animal, que possui um método chamado emitirSom(). Agora, vamos criar uma classe filha chamada Cachorro, que herda da classe Animal. A classe Cachorro pode substituir o método emitirSom() para que o cachorro emita um som diferente.

Exemplo de código

Aqui está um exemplo de código que demonstra o overriding:

“`
public class Animal {
public void emitirSom() {
System.out.println(“O animal está emitindo um som.”);
}
}

public class Cachorro extends Animal {
@Override
public void emitirSom() {
System.out.println(“O cachorro está latindo.”);
}
}
“`

Neste exemplo, a classe Cachorro substitui o método emitirSom() da classe Animal para que o cachorro emita o som “O cachorro está latindo” em vez do som genérico definido na classe Animal.

Quando usar Overriding?

O overriding é útil quando você deseja estender ou modificar o comportamento de um método herdado em uma classe filha. Isso permite que você personalize o comportamento do método para atender às necessidades específicas da classe filha.

Polimorfismo

O overriding é uma forma de polimorfismo, que é um dos princípios fundamentais da POO. O polimorfismo permite que objetos de diferentes classes sejam tratados de maneira uniforme, desde que compartilhem um relacionamento de herança comum. O overriding é uma maneira de alcançar o polimorfismo, permitindo que diferentes classes tenham implementações diferentes para o mesmo método.

Superclasse e Subclasse

No contexto do overriding, a classe pai é chamada de superclasse e a classe filha é chamada de subclasse. A subclasse herda todos os métodos e atributos da superclasse, mas pode substituir ou adicionar comportamentos específicos usando o overriding.

Overriding vs Overloading

É importante não confundir overriding com overloading. Overloading ocorre quando uma classe tem vários métodos com o mesmo nome, mas com diferentes assinaturas. O overriding ocorre quando uma classe filha substitui um método da classe pai com a mesma assinatura. Enquanto o overloading envolve a criação de métodos com o mesmo nome, mas com diferentes parâmetros, o overriding envolve a substituição de um método existente.

Considerações finais

O overriding é uma técnica poderosa na programação orientada a objetos que permite que uma classe filha substitua um método da classe pai. Isso permite que você personalize o comportamento do método para atender às necessidades específicas da classe filha. Ao entender o conceito de overriding e como usá-lo corretamente, você pode criar hierarquias de classes mais flexíveis e reutilizáveis em seus programas.