Private: acessa de uma classe mas não de outra?

5 respostas
S
class Data {
	private int dia = 0;
	private int mes = 0;
	private int ano = 0;
	
	public Data(int d, int m) {
		if (verificaData(d,m)) {
			System.out.println("Data inserida com sucesso");
		} else {
			System.out.println("A data não pode ser inserida");
		}
	}
	
	public boolean verificaData(int dia, int mes) {
		if (dia == 31 && mes == 02) {
			return false;
		} else {
			this.dia = dia;
			this.mes = mes;
			return true;
		}
	}
}
class Funcionario {
	
	private String nome;
	private String departamento;
	private String rg;
	
	private Data dataEntrada;
	
	public void setDataEntrada(int d, int m) {
		this.dataEntrada = new Data(d,m);
	}
	
	public void getDataEntrada() {
		System.out.println(this.dataEntrada.dia + "/" + this.dataEntrada.mes);
	}
}
class Teste {
	public static void main(String args[]){
		Funcionario f1 = new Funcionario();
		f1.setSalario(1000);
		f1.setDataEntrada(28,02);
		f1.getDataEntrada();
		
		/*
		Data d = new Data(28,02);
		System.out.println(d.dia + " / " + d.mes);
		*/
	}
}

Bom dia pessoal!

Por que consigo acessar os atributos da classe Data a partir da classe Funcionario e não consigo a partir da classe Teste?

Nota: Código todo desorganizado porque fiz diversos testes. Estou estudando java básico da apostila da caelum conforme recomendado.

[]´s

5 Respostas

fabiomedeirosf

Seguinte:

modificadores de acesso private, só se pode acessar o atributo dentro da mesma classe.

A partir da instancia de Data em outra classe qualquer, você não terá acesso diretamente aos atributos.

Para fazê-los, crie os metodos getters e setters, por exemplo:

class Data {  
    private int dia = 0;  

//para alterar o falor do atributo
public void setDia(int dia) {
this.dia = dia;
}

//para acessar o valor do dia
public int getDia(){return dia;}

na sua classe funcionario por exemplo, você fará assim:

Data d = new Data();
d.setDia(13);
//para obter o valor atribuito a esta instancia
int diaAtribuido = d.getDia();
S

Mas por que na classe Funcionario eu consegui alterar o dia e o mes? Por causa do método construtor invocado?
Caso contrário eu não conseguiria?

fabiomedeirosf

Porque na classe funcionário está insntancia Data e passando estes valores logo no construtor da classe data.

Toda classe tem um construtor, mesmo que vc não o declare, toda vez que vc cria um objeto de uma classe, o construtor é o responsável por fazer uma chamada implicita ao construtor da classe pai (super()) e inicializar algum atributo daquela classe.

Está correto, mas se vc precisar acessar os dados passados sem os metodos getters e setters para cada atributo você não terá acesso.

Espero que tenha conseguido explicar, qualquer coisa, poste ai.

S

Fiz o teste é é isso mesmo. Passei os valores pelo construtor.
Tentei fazer direto e deu o erro de atributo private. Fiz os testes com métodos e funcionou.

Entendi o conceito.

Obrigado.

fabiomedeirosf

Isso aí shinzo,

Procure encapsular os atributos de suas classes, e fazer o acesso a eles por meio dos getters e setters.

Legal dar uma lida em algum design pattern tambem, pode contribuir mto com suas aplicações.
Qualquer dúvida, poste ai.

Criado 11 de fevereiro de 2011
Ultima resposta 11 de fev. de 2011
Respostas 5
Participantes 2