Em minha opinião o correto é os atributos serem privados (private) com uma interface pública (getters e setters) como você quer herdar na outra classe a renda com mais 10% basta você sobrescrever o método getRenda() com a porcentagem a mais que você desejar.
Minha opinião é um pouco diferente do nosso amigo [quote]leandrobellini[/quote] eu criaria um método na classe Funcionario chamada calcularRenda() e sobrescreveria ele na classe FuncionarioBasico onde teria o valor alterado.
prefiro assim para deixar os getters e setters somente para seus fins ( pegar e setar ).
[quote=kritiuns]Minha opinião é um pouco diferente do nosso amigo [quote]leandrobellini[/quote] eu criaria um método na classe Funcionario chamada calcularRenda() e sobrescreveria ele na classe FuncionarioBasico onde teria o valor alterado.
prefiro assim para deixar os getters e setters somente para seus fins ( pegar e setar ).[/quote]
Se o percentual é fixo não vejo problema em ele ser adicionado no próprio getter. Dessa forma, a única coisa que teria de ser feito é sobrescrever o getter da variavél e fazer com que o retorno seja calculado, simples assim. Mas foi citado algo importante, crie os respectivos getters e setters e atribua o modificador private as variavéis, pois o encapsulamento é essencial em um caso como esse.
De acordo com o amigo, acredito que poderia ser algo assim certo…
class Funcionario {
private String nome;
private int codigo;
private float rendaBasica = 1000;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getCodigo() {
return codigo;
}
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
public float getRendaBasica() {
return rendaBasica;
}
public void setRendaBasica(Integer rendaBasica) {
this.rendaBasica = rendaBasica;
}
}
class FuncionarioBasico extends Funcionario {
private String escolaBasico;
private float rendaBasica;
public String getEscolaBasico() {
return escolaBasico;
}
public void setEscolaBasico(String escolaBasico) {
this.escolaBasico = escolaBasico;
}
@Override
public float getRendaBasica() {
return super.getRendaBasica()*1.1f;
}
public void setRendaBasica(float rendaBasica) {
this.rendaBasica = rendaBasica;
}
}
public class TesteRenda {
public static void main(String[] args) {
Funcionario f = new FuncionarioBasico();
System.out.println(f.getRendaBasica());
}
}
Sim, muito simplista, não é ? Um dos objetivos do encapsulamento é exatamente esse, poder alterar o valor setado e/ou buscado. Poderia fazer isso no setter ou no getter, independente. Sobre o seu teste ribclauport, faltou apenas setar o valor da renda antes de executar o getter
Imagine que você está em uma praça, e você perde seu relógio, ae alguem grita “Alguém perdeu este relógio?”
Você grita “É meu!”, this seria o seu grito “É meu”, o grito do objeto anunciando ser dono daquela “propriedade”, ou seja, this quer dizer “intância do objeto corrente”,
sendo assim realmente você está correto pois quando se tem a situação exposta por ti em quê o nome da variável local (parametros de metodos são variáveis locais) com o mesmo nome da variável de instância, o this permite dizer que você está referenciando a variável do objeto e não a variável local denotada pelo parâmetro do método.