problema con gestión de colas usando array de objetos java

Esta es una de las partes del ejercicio con el que estoy teniendo problemas, no sé como implementar los siguientes métodos de manera correcta:

Implementar los métodos siguientes en una clase que denominaremos Cola:

a) ponerEnCola: nos permitirá introducir una persona en la cola (sólo una cada vez que elijamos esta opción). Cada persona de debe colocar a continuación de la otra.
b) salirDeCola : nos permitirá sacar una persona de la cola (la persona que sale debe ser la de la primera posición)
c) visualizarCola : nos permitirá visualizar los datos de la persona que introduzcamos por teclado

Les dejo el código de lo hecho hasta ahora:

Esta es la clase Principal:

package ejercicio1;

import java.util.*;

public class Principal {

    final int TAM = 50;

    Cola gestor = new Cola();

    Scanner teclado = new Scanner(System.in);

    Persona() cola = new Persona(TAM);

    public Principal() {

        int opcion;
        do {
            menu();
            opcion = teclado.nextInt();
            switch (opcion) {
            case 1:
                int indice = 0;
                if (indice < TAM) {
                    cola = gestor.ponerEnCola(indice);
                    indice++;
                } else
                    System.out.println("No hay espacio en la cola");
                break;
            case 2:
                break;
            case 3:

                gestor.visualizar();
                break;
            case 4:
                System.out.println("Fin de programa");
                break;
            default:
                System.out.println("No has elegido ninguna de las opciones");
                break;
            }
        } while (opcion != 4);

    }

    public void menu() {
        System.out.println("Selecciona una de las siguientes opciones: ");
        System.out.println("1. Entra persona a la cola");
        System.out.println("2. Sale persona de la cola");
        System.out.println("3. Visualizar persona");
        System.out.println("4. Fin");
    }

    public static void main(String() args) {
        new Principal();
    }

}

Esta es la clase Cola, donde se implementan los métodos:

package ejercicio1;

import java.util.*;

public class Cola {

    Scanner teclado = new Scanner(System.in);

    final int TAM = 50;

    Persona() cola = new Persona(TAM);

    public Persona() ponerEnCola(int indice) {
        String dni;
        String nombre;

        System.out.println("Introduce nombre");
        nombre = teclado.next();
        System.out.println("Introduce dni");
        dni = teclado.next();
        
        
        cola(indice)= new Persona(nombre, dni);

        return cola;
    }
    
    public void salirDeCola() {
        
    }
    
    public void visualizarCola() {
        System.out.println();
        for (Persona elemento:cola) {
            System.out.println(elemento.getNombre()+" "+elemento.getDni());
        }
    }

}

Y finalmente, la clase Persona:

package ejercicio1;

public class Persona {

    private String dni;
    private String nombre;

    public Persona(String dni, String nombre) {
        this.dni = dni;
        this.nombre = nombre;
    }

    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

}

Mi problema está con la implementación de los métodos. Agradecería una ayuda. Gracias.