Dúvida sobre encapsulamento

Olá, para a prova eu preciso saber sobre proteger variáveis métodos get/is, set e os métodos add/remove para listener. Alguem pode me explicar melhor o encapsulamento de eventos listener, como funcionar e o que eu preciso saber para a prova?

Olá,

Essa parte de listener esta relacionado ao registro ou remoção de um listener em um componente de uma GUI. Um JavaBean suporta eventos
ao qual permite que um componente notifique de acordo com o evento que ocorre, esse objeto notificado se chama listener.
Para o exame você precisa saber que os metodos usados para registrar “add” e remover “remove” devem seguir o padrão JavaBeans.

Esse padrão é o seguinte:
Para registrar é:
add[NomeDoSeu][Tipo] ex: addActionListener ou addChangeListener
Para remover:
remove[NomeDoSeu][Tipo] ex: removeActionListener ou removeChangeListener

É isso ai!

abraço!

Para complementar, sua pergunta está ampla demais e fica difícil responder por completo.

Métodos getters, setters ou is é para você acessar os atributos ou operações de um objeto de forma segura/controlada.

Métodos do tipo evento (listener) são métodos invocados para indicar uma operação sobre o objeto ou mudança de estado do objeto.

Vou tentar exemplificar a maior parte do que você perguntou, mas recomento você entender os modificadores de acesso antes no site: http://www.tiexpert.net/programacao/java/public-private-protected.php

Vamos lá.

Esta classe Pessoa é abstrata e tentei colocar todos os exemplos possíveis e implementar Runnable para simular uma linha de vida mais tarde:

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public abstract class Pessoa implements Runnable {

	// atributos privados, só podem ser alterados via métodos setters
	// e consultados via métodos gettes
	private String nome;
	private String nacionalidade;
	private String sexo;
	private Date dataNascimento;
	private Date dataMorte;
	private int idade;
	private boolean vivo;
	private List<String> conhecimentos;
	
	// atributos protegidos, só podem ser alterados via métodos setters
	// e consultados via métodos gettes OU acessados pelos objetos herdeiros
	protected int peso;
	protected String corCabelo;
	protected boolean acordado;

	// atributo com modificador padrão (não informado), pode ser alterado e consultado diretamente
	// por objetos que estejam no mesmo package
	String tipoDeCalcado;

	// atributo com modificador publico, pode ser alterado e consultado diretamente
	// por objeto que estejam em qualquer package
	public String tipoRoupa;
	
	// restringe o construtor padrão para não ser invocado por outro objeto
	@SuppressWarnings("unused")
	private Pessoa() {

		this.conhecimentos = new ArrayList<String>();
	}
	
	// cria construtor publico
	public Pessoa(String nome, String nacionalidade, String sexo) {

		// invoca construtor padrão para iniciar List
		this();
		
		// se algum parâmetro for nulo, lança exceção de runtime
		if (nome == null || nacionalidade == null || sexo == null)
			throw new IllegalArgumentException("Todo os parâmetros do construtor devem ser informados.");

		this.nome = nome;
		this.nacionalidade = nacionalidade;
		this.sexo = sexo;
		this.dataNascimento = new Date();
		this.dataMorte = null;
		this.idade= 0; 
		this.vivo = true;

	}

	public void adicionarConhecimento(String conhecimento) {

		if (conhecimento == null) {
			throw new IllegalArgumentException("Parâmetro conhecimento não pode ser nulo.");
		}
		this.conhecimentos.add(conhecimento);
		
		// provoca o evento de conhecimento adquirido
		this.eventoAdquiriuConhecimento(conhecimento);
		
	}

	public void limparConhecimentos() {

		this.conhecimentos.clear();
		
		// provoca o evento de perda de conhecimentos
		this.eventoPerdeuConhecimentos();
		
		
	}

	// Eventos para o herdeiro concreto implementar para
	public abstract void eventoNasceu(Date date);
	
	public abstract void eventoMorreu(Date date);

	public abstract void eventoAdquiriuConhecimento(String conhecimento);

	public abstract void eventoPerdeuConhecimentos();

	public abstract void eventoFezAniversario(int idade);

	// Métodos getters e setters dos atributos privados
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCorCabelo() {
		return corCabelo;
	}

	public void setCorCabelo(String corCabelo) {
		this.corCabelo = corCabelo;
	}

	public String getNacionalidade() {
		return nacionalidade;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public Date getDataMorte() {
		return dataMorte;
	}

	public int getIdade() {
		return idade;
	}

	public boolean isVivo() {
		return vivo;
	}

	public boolean isAcordado() {
		return acordado;
	}

	public String getSexo() {
		return sexo;
	}

	// Simula uma linha da vida
	public void run() {

		// provoca o evento de nascimento
		this.eventoNasceu(this.dataNascimento);
		
		// Simula passagem do tempo
		for (int ano = 2012; ano < 2112; ano++) {

			// Faz uma pausa para tornar perceptível o tempo
			try {
				Thread.sleep(1000L);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
			// provoda evento de aniverario
			this.eventoFezAniversario(++idade);

		}
		
		// provoda evento de morte
		this.eventoMorreu(new Date());
		
	}
	
}

Agora vamos gerar Alguem a partir de uma Pessoa e simular uma linha de vida de alguém:

import java.util.Date;

public class Alguem extends Pessoa {

	public Alguem() {
		super("Zé", "Brasileiro", "Masculino");
		super.peso = 70;
		super.corCabelo = "Castanho escuro";
		super.acordado = true;
	}

	@Override
	public void eventoNasceu(Date date) {
		System.out.println("Ops, nasci em " + date.toString());
	}

	@Override
	public void eventoMorreu(Date date) {
		System.err.println("Ops, morreu em " + date.toString());
	}

	@Override
	public void eventoAdquiriuConhecimento(String conhecimento) {
		System.out.println("Ops, aprendi " + conhecimento);
	}

	@Override
	public void eventoFezAniversario(int idade) {
		System.out.println("Obaaa, festa de aniversário do(s) meu(s) " + idade + " de idade");
	}

	@Override
	public void eventoPerdeuConhecimentos() {
		System.out.println("Xiiii, perdi os conhecimentos");
	}
	
	public static void main(String[] args) {
		
		Alguem alguem = new Alguem();
		Thread linhaVida = new Thread(alguem);
		
		// Inicia vida de alguém
		linhaVida.start();
		
		System.out.println("Estou acordado? " + alguem.isAcordado());
		System.out.println("Qual meu nome? " + alguem.getNome());
		System.out.println("Sou natural de onde? " + alguem.getNacionalidade());

		// Espera alguém envelhecer um pouco antes de adicionar conhecimento
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		alguem.adicionarConhecimento("Primário");
		
		// Espera a pessoa terminar de viver
		try {
			linhaVida.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		// Encerra programa
		System.exit(0);
		
	}


}

wiliamps