Criar metodos

Estou estudando java atualmente e me encontro em dificuldade para criar os sequientes métodos…

void adicionaContato (Contato contato) - adiciona o parametro contato no vetor
contatos. Prever vetor cheio.

    void retiraContato (String nome) - retira (atribuir null) do vetor contatos o contato
    que tenha nome igual ao parametro nome

    void mostraContatoPessoal() - percorrer o vetor contatos e mostrar todos os contatos
    pessoais presentes no vetor contatos

    void mostraContatoProfissional() - percorrer o vetor contatos e mostrar todos os
    contatos profissionais presentes no vetor contatos

    Contato buscaContato (String nome) - percorre o vetor contatos ate encontrar um 
    contato que tenha o nome igual ao parametro nome. Se encontar, retornar o contato
    encontrado. Se nao encontrar, retornar null

    void mostraAniversariantes (Data dataAniversario) - percorrer o vetor contatos e
    mostrar todos os contatos pessoais que tenham data de aniversario igual ao 
    parametro informado

    void mostraEmpresaRamo (String ramoEmpresa) - percorrer o vetor contatos e 
    mostrar todos os contatos profissionais que tenham o atributo ramoEmpresa igual 
    ao parametro informad

principalmente na hora de separar as classes (contato) e suas extends, (contatoPessoal), e (contatoProfissional), me confundo ao criar os metodos como pedido no exercicio!

O que tentou fazer? Mostra o código.

public class Agenda {
private Contato contato[]= new Contato[10];

public void adicionaContato(Contato contato[])
/*Contato contato) - adiciona o parametro contato no vetor contatos. 
Prever vetor cheio.*/
{
    if(contato.length <= 10)
      {
        for (int i = 0; i < this.contato.length; i++) {   
            if (this.contato[i] == null) {   
                Contato f = null;
                this.contato[i] = f;   
                break;   
            } 
            else{
                System.out.println("vetor cheio");
                } 
        }
        int i = 0;
        if (i > 10){  
    System.out.println("Cheio");  
         }  
        else{  
        this.contato = contato[i];      
        i++;    
        }  
  
    }
    
}



void mostraContatoPessoal() {
for (Contato x : this.contato) {
	String y = x.nome;
	System.out.println(y);
}
}


Contato buscaContato(String nome)
{
int i = 0;
           Contato agenda = null;
    while(i < 1000 && contato[i] != null)
    {
            if (contato[i].getNome().contains("nome"))
            {
                    agenda = contato[i];
                    break;
            }
            i++;
    }


    if (agenda == null)
    {
            System.out.println("Não foi encontrado");
    }
    else {
            System.out.println("Foi encontrado:" 
            + agenda.getNome() + " "
            + agenda.getTelefone());
    }
}

void mostraEmpresaRamo (String ramoEmpresa){      
System.out.println("Contatos cadastrados\n");      
for (int i = 0; i < this.contato.length; i++) {  
    if (contato[i] != null){  
    System.out.println("NR: " + i);  
    System.out.println("Nome: " + Contato[i].getnome  +" Telefone " + Contato[i].gettelefone + " telefone: " + Contato[i].gettelefone);      
    }  
    else{  
        break;  
    }  
}  

}

to muito errado isso, to mais perdido que cego em tiroteio, alguma dica para me ajudar?

Pelo visto o senhorzinho nasceu correndo, já? Cara, entenda, é um passo de cada vez. Tropeços e quedas serão inevitáveis.
Agora, se você acha que não dá conta, vai fazer filosofia.

Pois bem, vejamos:

Essa validação está errada. Cada posição valdiada que esteja com um elemento informa que o vetor está cheio, por que?

Eu faria algo como:

boolean umVazio = false;
for (int i = 0; i < this.contato.length; i++) {
    if(null != this.contato[i]) {
        umVazio = true;
        break;
    }
}
if(!umVazio) {
    System.out.println("vetor cheio");
}