public double getBonificacao()
Não entendi direito, se estou sobrescrevendo o método acima nas classes filhas porque não tem que usar a anotação @override ???
public double getBonificacao()
Não entendi direito, se estou sobrescrevendo o método acima nas classes filhas porque não tem que usar a anotação @override ???
Bom dia Oscar, tudo bem?
A anotação @Override
é uma anotação de segurança que ajuda o compilador a garantir que um método está sobrecscrevendo outro. Ela serve como um acordo entre as classes mãe e filha, em que a filha pode ter certeza de que a a mãe tem um método com a assinatura devida.
Por exemplo, se você tiver as classes
class Foo {
public void foo() {
System.out.println("Foo");
}
}
class Bar extends Foo {
@Override
public void foo() {
System.out.println("Bar");
}
}
A classe Bar
está sobrescrevendo o método foo
da classe Foo
, e se você instanciar uma Bar
e chamar o método foo
, vai receber a saída Bar
:
new Bar().foo();
> Bar
O que o @Override
faz é garantir que a classe mãe Foo
tenha o método foo()
. Se isso não ocorrer, o código não compila:
class Foo {
public void bar() {
System.out.println("Foo");
}
}
class Bar extends Foo {
@Override
public void foo() {
System.out.println("Bar");
}
}
O código acima não compila pois a classe Bar
diz que está sobrescrevendo o método foo
mas este não existe.
Já o código abaixo compila e roda normalmente, pois não há nenhum acordo entre as classes.
class Foo {
public void foo() {
System.out.println("Foo");
}
}
class Bar extends Foo {
public void foo() {
System.out.println("Bar");
}
}
Este último abaixo compila e roda normalmente, porém com um detalhe: a classe Bar
tem acesso ao dois métodos!
class Foo {
public void bar() {
System.out.println("Foo");
}
}
class Bar extends Foo {
public void foo() {
System.out.println("Bar");
}
}
Bar instance = new Bar();
instance.foo();
> Bar
instance.bar();
> Foo
Isso ocorre pois ambos os métodos existem, e não existe nenhum contrato dizendo que é necessário existir um método foo
na classe Foo
.
Deu pra entender? Espero que sim, mas se ficou confuso não hesite em perguntar mais!
Um abraço e bons estudos!