Duvida implementar método intersecta()

Pessoal estou a fazer um trabalho de uma agenda, já fiz tudo o que conseguia e percebia e fui tirando algumas dúvidas por aqui, no entanto restam duas dúvidas que não consigo esclarecer e esperava que alguém me pudesse ajudar.
as dúvidas são: Para que serve o método getDia() da classe AgendaDia que aparece no diagrama UML (não vejo uso para ele)
e como implementar o método intersecta() das classes Evento, Aniversário e Reuniao.
E já agora será que os métodos mostrar estão correctos? É que não dei uso para ele na classe Evento.

[code]package trabalho1;

public abstract class Agenda extends Evento{

private Evento[] eventos;
public int maxEventos;

public Agenda(int maxEventos){	
	this.maxEventos=maxEventos;
	eventos= new Evento[maxEventos];
	
}
public boolean completa(){
	if(maxEventos!=0){
		return false;
	}
	else
		return true;
	
}

public boolean add(Evento ent){
	
	if(ent.intersecta(ent)){
		return false;
	}		
	if(completa()){
		return false;
	}
	else
		eventos[maxEventos-1]= ent;
		maxEventos--;
		return true;
}
public void mostrar(){
	maxEventos=eventos.length;
	while(maxEventos>=0){			
		eventos[maxEventos-1].mostrar();
		maxEventos--;
	}					
}

}
[/code]

[code]package trabalho1;

public class AgendaDia extends Agenda{

private int dia;

public AgendaDia(int maxEventos, int dia){
	super(maxEventos);
	this.dia=dia;	
}	

public int getDia(){
	return dia;
}
public void mostrar(){
	System.out.println("Agenda do dia "+dia);
	super.mostrar();
	
}

}
[/code]

[code]package trabalho1;

public abstract class Evento {

protected Evento(){		
}
public void mostrar(){	
}
public boolean intersecta(Evento e){		
}

}[/code]

[code]package trabalho1;

public class Aniversario extends Evento{

private String nome;

public Aniversario(String nome){	
	this.nome=nome;
}
public void mostrar(){
	System.out.println("Aniversário de "+nome);
}
public boolean intersecta(Evento e){
	
				return false;
	
}

}[/code]

[code]package trabalho1;

public class Reuniao extends Evento{

private String local;
private int inicio, fim;

public Reuniao (String local, int inicio, int fim){
			this.local=local;
			this.inicio=inicio;
			this.fim=fim;
}
public void mostrar(){
	System.out.println("Reunião - "+local+", das "+inicio+" às "+fim+" horas");
	
}
public boolean intersecta(Evento e){					
	
}

}[/code]

[code]package trabalho1;

public class Teste {
public static void main (String args[]){

	Reuniao r1 = new Reuniao("Lisboa", 12, 14);
	Reuniao r2 = new Reuniao("ISEL", 15, 18);
	Reuniao r3 = new Reuniao("ISEL", 14, 18);
	Aniversario a1 = new Aniversario("João");
	Aniversario a2 = new Aniversario("Maria");
	AgendaDia d = new AgendaDia(4,12);
	d.add(r1); 
	d.add(r2); 
	d.add(r3);
	d.add(a1); 
	d.add(a2);
	d.mostrar();	
	
}

}[/code]

o objectivo da classe intersecta() é comparar os eventos e caso se sobreponham retorna true e não é adicionado.