A variável "soma" na classe ControleBonificacao não deveria ser static? Por que a soma funciona?
A variável "soma" na classe ControleBonificacao não deveria ser static? Por que a soma funciona?
Oie Charles, tudo bem com você?
Nesse caso a variável "soma" não deve ser "static", pois ela é algo relacionado ao objeto, à uma instancia, ela guarda o resultado da lógica feita pelo método "registra", ou seja, armazena a soma das bonificações de todos os funcionários, fazendo um processo que envolve outras classes e não a si mesma.
Acredito que você esteja confundindo com o que foi mostrado no curso "Java OO: Introdução à Orientação a Objetos", onde na última aula teve que ser usado o "static" no atributo "total", nesse caso foi preciso usar o "static", pois essa variável guardaria dados de todas as instancias da classe "Conta", para depois conseguir informar quantas "Contas" foram instanciadas no sistema, ou seja, por essa variável ter que interagir com todas essas instancias ela precisa deixar de ser um atributo de uma instancia só para se tornar de todas, pertencendo a classe e não ao objeto, precisando assim usar o "static". E isso não ocorre com a classe "ControleBonificações", já que ela vai ser responsável em fazer a soma das bonificações de todos os funcionários, ou seja, ela vai fazer um processo que envolve outras classes e não ela mesma.
Espero que eu tenha ajudado, qualquer dúvida ou problema fico a disposição :)
Bons estudos!
Olá meu amigo agradeço muito sua explicação, mas ainda não ficou claro pra mim, poderia me passar um exemplo. Desde já agradeço.
Oie Charles, tudo bem?
Perdão pela demora.
Quando o instrutor usou o "static" no curso "Java OO: Introdução à Orientação a Objetos", ele queria explicar sobre a situação de quando se deve usar o "static", que é quando você percebe que aquela lógica precisa pertencer à classe e não ao objeto, a diferença entre esses dois momentos é que uma lógica da classe afeta e manipula todos os objetos instanciados daquela classe, já uma lógica do objeto interfere somente nele mesmo. Na situação mostrada no curso, onde o instrututor queria saber o total de vezes que a classe "Conta" foi instanciada, ele optou por usar o "static" para fazer isso, fazendo com que a variável "total" acressentase "+1" toda vez que a classe "Conta" fosse instanciada, chegando na conclusão desejada. Mas também não seria impossível fazer de qualquer outro jeito, como por exemplo desse jeito abaixo:
public class Teste{
public static void main(String[] args) {
int total = 0;
ContaCorrente c1 = new ContaCorrente();
total++;
ContaCorrente c2 = new ContaCorrente();
total++;
ContaCorrente c3 = new ContaCorrente();
total++;
ContaCorrente c4 = new ContaCorrente();
total++;
System.out.println(total);
}
}
Entretando fazer desse jeito acima é imprático, acontece muita repetição de código e não é muito legal, por isso nessa situação para explicar a finalidade do "static", o professor fez daquela maneira mostrada na aula.
Voltando à aula de onde surgiu essa dúvida, seria impraticável usar o "static" para fazer o calculo da bonificação, pois cada um deles, o gerente, funcionário e o editor de vídeo são de classes diferentes, e como já dito, o "static" torna a "variável" e "método" pertencentes à Classe, mas somente na classe na onde eles foram usados.
Temos um artigo na Caelum que explica o uso do "static", caso tiver interesse, clique aqui.
Espero que agora tenha ficado mais claro!
Fico a disposição para qualquer outra dúvida. :)