Utilizando Private ! Duvidas

6 respostas
jorhudson

Boa noite galera do Java,

Estou com uma duvida em meu código …
Divide em dois arquivos no mesmo projeto ,

:arrow: 1 A Classe

import java.util.Scanner;

public class Estoque {

    private int prod;

	void listar(){
		
		System.out.println("Quantidade Estoque: "+ prod);
		
	}
    void incluir(float quant){
	
    	prod+=quant;
    	
		
	}
	void excluir(float quant){
		
		prod-=quant;
	}

}

2 Parte (Main)

import java.util.Scanner;

public class Exec {
	    
public static void main(String[] args) {
	    Estoque produto = new Estoque();
	    Scanner entrada = new Scanner(System.in);
		System.out.println("COMPAQ\n" +
				"Digite opção desejada: \n" +
				"1- Incluir Produto \n" +
				"2- Excluir Produto \n" +
				"3- Lista Estoque \n" +
				"4- Sair");
		int op = entrada.nextInt();
		while( op != 4 )
		{
			if( op == 1 ){
				System.out.println("Quantidade Produto : ");
				int qtd= entrada.nextInt();
				produto.incluir(qtd);
				System.out.println("1- Incluir Produto \n2- Excluir Produto \n3- Lista Estoque \n4-Sair");
				op = entrada.nextInt();
			}
			if( op == 2 )
			{
				System.out.println("Retirar do Estoque : ");
				int qtd2 = entrada.nextInt();
				produto.excluir(qtd2);
				System.out.println("1- Incluir Produto \n2- Excluir Produto \n3- Lista Estoque \n4-Sair");
				op = entrada.nextInt();
			}
			if( op == 3 )
			{
				System.out.println( :?:produto.prod);  // Nessa parte, não sei o que eu passo quando os atributos são private... O que eu passo, por que ele não recebe nenhum valor
				System.out.println("1- Incluir Produto \n2- Excluir Produto \n3- Lista Estoque \n4-Sair");
				op = entrada.nextInt();
			}
			
		
		
		   }
		System.out.println("Programa Finalizado!");
		}   
}

Alguem poderia me ajudar ???

6 Respostas

romarcio

Quando você cria atributos como private eles só podem ser usados dentro da própria classe, fora dela você não tem acesso.
Para ter acesso, você deve criar o método set e o método get.
Então poderá fazer produto.getProd() para recuperar o valor da variável.

malokas

Se você quer acessar o prod você tem que criar um metodo get que vai retornar o produto.

public int getProd() {
		return prod;
	}

Ou então trocar o modificador de acesso de prod.

jorhudson

Hummm … entendi … verifiquei meu código fonte, e tive exito, vcs poderiam me dizer a logica do get,set… ?
Eu entendi que o get recupera o valor e o set? :smiley:

Muito Obrigado :lol:

malokas

Como o atributo vai ta encapsulado, não tem como você modificar o valor diretamente, para isso que serve o set, para modificar o valor.
Um exemplo de set para o seu caso é esse.

public void setProd(int prod) {
	this.prod = prod;
}
M

Só lembrando que o código abaixo é um falso encapsulamento.

public class XPTO {
   private int value;

   public int getValue() {
       return value;
   }

   public void setValue(int value) {
       this.value = value;
   }
}

Como pode ser visto, o código acima é apenas uma maneira lenta de fazer isso:

public class XPTO {
   public int value;
}

Claro que você nunca deve fazer o segundo exemplo e é claro que as vezes usar métodos acessores (set/get) fazem sentido, mas não abuse deles, pense no design como um todo.

Mais em:

http://www.fragmental.com.br/wiki/index.php/Fantoches
http://blog.caelum.com.br/nao-aprender-oo-getters-e-setters/

ViniGodoy

Sim, um encapsulamento incompleto.
Ele só encapsula o tipo de dado. Mas ele permite que o programador, posteriormente, insira regras de negório no método setter.

Bom, também fiz um post bastante longo e completo sobre encapsulamento:

Criado 30 de março de 2011
Ultima resposta 30 de mar. de 2011
Respostas 6
Participantes 5