Boa noite, estou fazendo este teste em Programação Orientada a Objetos, usando somente getters, eu não conseguir usar private neste exercício , está correto ?

package atividade1;

public class Fatura
{

public int numeroItem;
public String descricao;
public int quantidadeComprada;
public double valorUnitario;

Fatura(int numeroItem, String descricao, int quantidadeComprada, double valorUnitario) 
{
    this.numeroItem = numeroItem;
    this.descricao = descricao;
    this.quantidadeComprada = quantidadeComprada;
    this.valorUnitario = valorUnitario;
}

public double valorFatura() 
{
    double valorFatura = this.quantidadeComprada * this.valorUnitario;
    return valorFatura;
}

Fatura() {

}

public int getNumeroItem()
{
    return this.numeroItem=numeroItem;
}

public String getDescricao()
{
    return this.descricao=descricao;
}

public int getQuantidadeComprada()
{
    if (quantidadeComprada < 0)
    {
        return this.quantidadeComprada = 0;
    } else 
    {
        return this.quantidadeComprada = quantidadeComprada;
    }

}

public double getValorUnitario() 
{
    if (valorUnitario < 0) 
    {
        return this.valorUnitario = 0.00;
    } else 
    {
        return this.valorUnitario = valorUnitario;

    }
}

}

public class Principal
{

public static void main(String[] args) 
{

    Fatura novoItemSapato = new Fatura();
    novoItemSapato.descricao = "Calcado";
    novoItemSapato.numeroItem = 100;
    novoItemSapato.quantidadeComprada = 2;
    novoItemSapato.valorUnitario = 6.00;

    System.out.println("Valor da sua compra ");
    System.out.println(novoItemSapato.getDescricao() + " numero item : " + novoItemSapato.getNumeroItem() + " quantidade comprada : " + novoItemSapato.getQuantidadeComprada()
            + " valor unitario :  " + novoItemSapato.getValorUnitario() + " ");
    System.out.println("Sua fatura : " + novoItemSapato.valorFatura());
    System.out.println(" ");

    Fatura novoItemChinelo = new Fatura();
    novoItemChinelo.descricao = "Devolucao";
    novoItemChinelo.numeroItem = 150;
    novoItemChinelo.quantidadeComprada = 0;
    novoItemChinelo.valorUnitario = 0.00;

    System.out.println("Valor da sua compra ");
    System.out.println(novoItemChinelo.getDescricao() + " numero item : " + novoItemChinelo.getNumeroItem() + " quantidade comprada : " + novoItemChinelo.getQuantidadeComprada()
            + " valor unitario :  " + novoItemChinelo.getValorUnitario() + " ");
    System.out.println("Sua fatura : " + novoItemChinelo.valorFatura());
    System.out.println(" ");

}

}

Pergunta 1:
Por que não consegue usar private neste exemplo? Dá erro? Qual?

Pergunta 2:
Até onde entendo e me recordo, não é uma prática muito comum fazer isso:

if (valorUnitario < 0)  {
    return this.valorUnitario = 0.00;
} else  {
    return this.valorUnitario = valorUnitario;
}

Em um getter. No máximo, validamos se o objeto é nulo e em casos específicos (como em coleções).
De onde tirou isso? O mais comum é fazer no setter.

Pergunta 3:
(Que responde a pergunta 1)
Qual a razão de não criar os setters? Como você está definindo valores aos atributos desta maneira

novoItemSapato.descricao = "Calcado";
novoItemSapato.numeroItem = 100;
novoItemSapato.quantidadeComprada = 2;
novoItemSapato.valorUnitario = 6.00;

Caso coloque como private, realmente não conseguirá.

Pergunta 4:
Você tem um construtor que recebe todos os parâmetros

Fatura(int numeroItem, String descricao, int quantidadeComprada, double valorUnitario) {

Por que não o utiliza? Isso substituiria o código da pergunta 3.

1 curtida

Boa noite, é que na pergunta não pede para usar o setter , entendeu ?

Entendi, por isso você tem o construtor que recebe os argumentos (parâmetros) que definirão os valores aos atributos e, devido a isso, você pode usar private.

1 curtida

vou refazer esta questão de novo . Mas obrigado ai pela dica.

Amigo , eu passo passar parâmetros em Getters também ?

Cara, tenta entender, você tem um construtor padrão (que é o construtor sem argumentos) e tem este

Fatura(int numeroItem, String descricao, int quantidadeComprada, double valorUnitario) {

Que recebe um parâmetro para cada atributo que você possui na classe Fatura.
Logo, você deve utilizar este construtor e nada de setter ou disso

novoItemSapato.descricao = "Calcado";
novoItemSapato.numeroItem = 100;
novoItemSapato.quantidadeComprada = 2;
novoItemSapato.valorUnitario = 6.00;

Ficou claro?

sim , entendi agora amigo , massa.obrigado ai .