Ajuda com herança[RESOLVIDO]

Pessoal, criei uma classe funcionário com as seguintes características:

class Funcionario { String nome; Integer codigo; Integer rendaBasica = 1000; }

Agora preciso criar outra classe que herde as propriedades dessa, porém com acréscimo de 10% na reda:

[code]
class FuncionarioBasico extends Funcionario
{
String escolaBasico;
rendaBasica *= 1.1;

}[/code]

Como acrescento 10% ao valor rendaBasica para um FuncionarioBasico?

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.

Abraços.

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 :slight_smile:

Abraços.

“Opa” verdade…

Obrigado pela correção!

Marca como [RESOLVIDO]

Pessoal, obrigado pela ajuda!

Entendi perfeitamente as soluções propostas e realmente, devo usar mais o private e encapsular os dados :smiley:

Só mais uma dúvida:

Porque o this. é importante?

Neste caso, haveria um erro pois estou acessando a varável nome do argumento e não do objeto??

public void setNome(String nome) { // this.nome = nome; nome = nome; }

Obrigado pela ajuda ae pessoal, comecei com java e orientação a objetos essa semana.

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.

Legal, tudo entendido :smiley:

Obrigado a todos pela ajuda!!

Topico resolvido!

Abraço!