Exercício em Java - Não imprime corretamente as fases

Olá pessoal!

Poderia me ajudar com esse exercício em Java?

Sou iniciante em Java e estou tentando fazer basicamente um quadro de projetos ágeis, ou seja, tenho duas tarefas e elas precisam passar pelas seguintes fases: BACKLOG - TODO - DOING - DONE.

A saída deverá ser algo assim:

BACKLOG
Tarefa 1
Tarefa 2

TODO

DOING

DONE


BACKLOG
Tarefa 2

TODO
Tarefa 1

DOING

DONE


BACKLOG
Tarefa 2

TODO

DOING
Tarefa 1

DONE


BACKLOG
Tarefa 2

TODO

DOING

DONE
Tarefa 1

E o mesmo acontecer com a Tarefa 2

Implementei as seguintes classes:

Classe Quadro:

class Quadro {
    static int BACKLOG = 0;
    static int TODO = 1;
    static int DOING = 2;
    static int DONE = 3;
    String labelFases[] = {"BACKLOG", "TODO", "DOING", "DONE"};
    Fase fase[] = new Fase[4];

    public Quadro() {
        for (int i=0; i<4; i++)
            fase[i] = new Fase();
    }
    public void adiciona (Cartao c) {
        fase[BACKLOG].adiciona(c);
    }
    public void prepara (Cartao c) {
        fase[BACKLOG].remove(c);
        fase[TODO].adiciona(c);
    }
    public void inicia (Cartao c) {
        fase[TODO].remove(c);
        fase[DOING].adiciona(c);
    }
    public void encerra (Cartao c) {
        fase[DOING].remove(c);
        fase[DONE].adiciona(c);
    }
    public String toString() {
        String saida = "";
        for (int i=0; i<4; i++)
            saida += labelFases[i] + "\n" + fase[i].toString() + "\n";
        return saida;
    }
}

Classe Fase:

class Fase{
Cartao cartao[] = new Cartao[99];

    void adiciona(Cartao c){
        cartao[Quadro.BACKLOG] = c;
    }

    void prepara(Cartao c){
        cartao[Quadro.TODO] = c;
    }
    void inicia(Cartao c){
        cartao[Quadro.DOING] = c;

    }
    void encerra(Cartao c){
        cartao[Quadro.DONE] = c;
    }
    void remove(Cartao c){
        cartao[-1] = c;
    }
}

Classe Cartao:

class Cartao{
    String nome;
    public Cartao(String nome){
        this.nome = nome;
    }
}

Classe QuadroGeral:

public class QuadroGeral {
    public static void main(String[] args) {
        Quadro quadroGeral = new Quadro();
        Cartao tarefa1 = new Cartao("Tarefa 1");
        quadroGeral.adiciona(tarefa1);
        Cartao tarefa2 = new Cartao("Tarefa 2");
        quadroGeral.adiciona(tarefa2);
        System.out.println(quadroGeral);
        quadroGeral.prepara(tarefa1);
        System.out.println(quadroGeral);
        quadroGeral.inicia(tarefa1);
        System.out.println(quadroGeral);
        quadroGeral.encerra(tarefa1);
        System.out.println(quadroGeral);
    }
}

Estou tendo a seguinte saída:

BACKLOG
Fase@60e53b93
TODO
Fase@5e2de80c
DOING
Fase@1d44bcfa
DONE
Fase@266474c2

BACKLOG
Fase@60e53b93
TODO
Fase@5e2de80c
DOING
Fase@1d44bcfa
DONE
Fase@266474c2

BACKLOG
Fase@60e53b93
TODO
Fase@5e2de80c
DOING
Fase@1d44bcfa
DONE
Fase@266474c2

BACKLOG
Fase@60e53b93
TODO
Fase@5e2de80c
DOING
Fase@1d44bcfa
DONE
Fase@266474c2

Poderiam me ajudar?

Isso é a implementação padrão do método toString() da classe Fase.
Ao invés de imprimir o toString(), imprima a propriedade de seu interesse.
Ou, sobrescreva o método toString() pra apresentar o que você quiser.