@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