Bom dia a todos.
Você pode também construir métodos que retorne o ano, modelo e o tipo de combustível do carro, e é para isso que servem os métodos getters (get), já os métodos setters (set), servem para atribuir os valores dos atributos, quando você faz o encapsulamento dos mesmos, ou seja, você encapsula os atributos com o modificador “private” e publica os métodos “getters” e “setters”, assim:
public class Carro {
// Declara as variáveis ano, modelo, combustível com o modificador private
private int pAno;
private String pModelo, PCombustivel;
// Construtor recebendo parâmetros
public Carro(int pAno, String pModelo, String pCombustivel) {
this.ano = pAno;
this.modelo = pModelo;
this.combustivel = pCombustivel;
}
/* Construtor sobrecarregado sem parâmetros,
caso você necessite instanciar a classe sem parâmetros */
public Carro() { }
// Método getters que apanha os valores dos atributos
public int getPAno() {
return pAno;
}
public String getPModelo() {
return pModelo;
}
public String getPCombustivel() {
return pCombustivel;
}
// Métodos setters para atribuir valores aos atributos encapsulados
public void setPAno(int pAno) {
this.pAno = pAno;
}
public void setPModelo(String pModelo) {
this.pModelo = pModelo;
}
public void setPCombustivel(String pCombustivel) {
this.pCombustivel = pCombustivel;
}
/* O método eficienciaCarro tem que ser um método
que retorne algum valor, algum nível, eis uma susgestão. */
public int eficienciaCarro() {
int nivel = 0;
// fazendo cálculos usando a recursividade dos métodos getters
switch (getPAno()) {
case 1995: nivel = 1; break;
case 2000: nivel = 5; break;
......
}
if (getPCombustivel().equals("gasolina")) {
nivel += 20; //
}
// blablablabla
return nivel;
}
}
Presumo que você já deva conhecer a técnica do encapsulamento, contudo estou reprisando este conceito para que você entenda a sua real necessidade na maioria dos casos, por exemplo, haverá partes da sua aplicação em que você terá que instanciar a classe carro sem a passagem dos parâmetros, como você construiu a classe com apenas um construtor, isto engessa e te obriga sempre a instanciar a classe com a passagem dos parâmetros, uma vez que, ao definir um construtor com a passagem de parâmetros, este construtor definido passa ser o único, e por isso eu implementei um outro construtor sobrecarregado vazio, para quando houver a necessidade de você instanciar a classe sem os parâmetros, você possa fazê-lo sem erros.
Mas como vou atribuir os valores aos atributos da classe se não passo os parâmetros ? É ai que entra os métodos “setters”, já os “getters” sevem para apanhar os valores armazenados nos atributos.
Eu tenho mesmo que usar o encapsulamento dos atributos ? Ou posso torná-los diretamente públicos e acessá-los diretamente na instância, como no exemplo abaixo ?
public class Carro {
public String pModelo;
.....
.....
}
....
....
Carro car = new Carro()
car.pModelo = "Marea";
Você pode fazer isto, porém você não está protegendo os dados dos seus atributos, suponhamos que você quer criar uma regra de validação de dados, você pode fazer isto dentro dos métodos “setters”, como no exemplo acima, suponhamos que você trabalhe numa concessionária Wolkswagen, obviamente o atributo pModelo não pode receber carros da Fiat como o Marea, logo você pode criar validações dentro dos métodos setters, onde você encapsulando (escondendo) os atributos da classe, você pode protegê-los, criando regras de validação dentro dos setters, sem que haja acesso direto a atributo, entendeu.
Espero ter ajudado.