Muitas dúvidas de quem está aprendendo a programar.
A) Notei que eu posso sobrescrever um método independente de ter o @override antes dele. Então pra que existe essa palavra reservada se ela não serve pra nada?
@Override
public double getBonificacao() {
return this.salario * 0.10;
}
Como o exemplo abaixo funcionam da mesma forma.
//@Override
public double getBonificacao() {
return this.salario * 0.10;
}
B) Por exemplo, tem como usar super de alguma forma para mudar direto o valor de um atributo?
Por exemplo, eu tenho uma classe assim:
package br.com.teste.funcionarios;
public class funcionarios {
protected String nome = "Joao";
}
Em uma segunda classe eu faço:
public class gerente extends funcionarios {
Existe alguma forma aqui dentro de mudar direto o valor de nome sem criar um setter? Usando Super?
}
Primeiramente @Override não é uma palavra reservada, é uma anottation.
O propósito dela é aumentar a legibilidade para os humanos e para facilitar a vida do compilador.
Se um método for anotado com @Override mas de fato não estiver sobrescrevendo um método da superclasse, o compilador gera um erro.
Se você declara um método com o mesmo nome, mesmo tipo de retorno e mesmos parâmetros de um método de alguma superclasse, você está fazendo uma sobrescrita.
Independente de ter anotado com @Override ou não.
Outra coisa, método de classe é uma coisa, método de instância é outra.
Não é possível fazer override de métodos de classe, só de métodos de instância.
Perfeitamente, o atributo nome da classe Funcionario foi declarado como protected, isso significa que ele será acessível para qualquer subclasse de Funcionario, você nem precisa usar super para isso.
public class Gerente extends Funcionario {
void alteraAtributoHerdado() {
nome = "Valor Alterado"; // simples assim
}
}