@Override em Java
Neste guia, vamos mergulhar profundamente no tópico de substituição e a anotação @override em Java. Substituir é o conceito em que uma classe filha tem o mesmo método de sua classe pai. Este conceito é um exemplo de polimorfismo de tempo de execução.
Diferença entre substituir e sobrecarregar em Java
A sobreposição é freqüentemente confundida com outro termo semelhante denominado sobrecarga. Antes de prosseguir, vamos ver as diferenças significativas entre eles na tabela a seguir.
| Substituição de método | Sobrecarga de método |
|---|---|
| Os métodos devem ter o mesmo nome e assinatura | Os métodos devem ter o mesmo nome, mas assinaturas diferentes |
| É um exemplo de polimorfismo de tempo de execução | É um exemplo de polimorfismo em tempo de compilação |
| O tipo de retorno de todos os métodos deve ser o mesmo | O tipo de retorno pode ou não ser o mesmo |
| A substituição acontece entre duas ou mais classes | A sobrecarga acontece na mesma classe |
| Os parâmetros devem ser os mesmos | Os parâmetros devem ser diferentes |
a anotação @Override em Java
A anotação @Override diz ao compilador Java que queremos sobrescrever um método da superclasse. Embora seja desnecessário usar @Override sempre que quisermos implementá-lo em um processo, recomendamos usá-lo porque podemos cometer erros ao criar os métodos. Por exemplo, podemos fornecer parâmetros diferentes na classe filha, o que a torna sobrecarregada em vez de sobrescrita.
Para superar o erro, usamos @Override acima do nome do método nas classes filhas que informa ao compilador que queremos sobrescrever o método. Se cometermos algum erro, o compilador irá gerar um erro.
No exemplo abaixo, temos quatro classes. A classe OverrideJava é onde está o método main() e onde os métodos de outras classes serão chamados usando seus objetos. Então temos três outras classes nas quais a FirstClass tem um método chamado method1() com uma mensagem de impressão dentro. Finalmente, a classe SecondClass estende a FirstClass que usa o conceito de herança. Aqui, usamos o mesmo nome de método e assinatura method1() que sua classe pai como FirstClass.
Observe que na classe SecondClass, usamos a anotação @Override. Em seguida, estendemos a SecondClass na classe ThirdClass e usamos o método method1() com a anotação. Para verificar qual método é chamado, criamos um objeto de ThirdClass, que é a classe filha, e chamamos method1(). Na saída, observamos que o método dentro de ThirdClass é chamado porque o filho alterou a implementação interna após o pai.
public class OverrideJava {
public static void main(String[] args) {
ThirdClass thirdClass = new ThirdClass();
thirdClass.method1();
}
}
class ThirdClass extends SecondClass {
@Override
void method1() {
System.out.println("Overriding method1 in Third Class");
}
}
class SecondClass extends FirstClass {
@Override
void method1() {
System.out.println("Overriding method1 in Second Class");
}
}
class FirstClass {
void method1() {
System.out.println("This is method1");
}
}
Resultado:
Overriding method1 in Third Class
Se quisermos chamar method1() da classe pai em vez da classe filha, podemos usar super.method1() que chama method1() de sua superclasse. A saída mostra que dentro de ThirdClass primeiro, sua classe pai que é o método de SecondClass é chamada e, em seguida, sua própria implementação é chamada.
public class OverrideJava {
public static void main(String[] args) {
ThirdClass thirdClass = new ThirdClass();
thirdClass.method1();
}
}
class ThirdClass extends SecondClass {
@Override
void method1() {
super.method1();
System.out.println("Overriding method1 in Third Class");
}
}
class SecondClass extends FirstClass {
@Override
void method1() {
System.out.println("Overriding method1 in Second Class");
}
}
class FirstClass {
void method1() {
System.out.println("This is method1");
}
}
Resultado:
Overriding method1 in Second Class
Overriding method1 in Third Class
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn