Ajuda com a classe abstrata em Java com variável privada do tipo List <E>

Faz dois anos desde a última vez que codifiquei algo em Java, então minhas habilidades de codificação estão um pouco enferrujadas.

Preciso salvar dados (um perfil de usuário) em diferentes estruturas de dados,ArrayList eLinkedList, e ambos vêm deList. Quero evitar a duplicação de código onde puder e também quero seguir as boas práticas de Java.

Para isso, estou tentando criar uma classe abstrata em que as variáveis privadas serão do tipoList<E> e crie 2 subclasses, dependendo do tipo de variável.

O problema é que não sei se estou fazendo isso corretamente, você pode dar uma olhada no meu código:

Classe: DBList

import java.util.List;

public abstract class DBList {

    private List<UserProfile> listName;
    private List<UserProfile> listSSN;

    public List<UserProfile> getListName() {
    return this.listName;
    }

    public List<UserProfile> getListSSN() {
    return this.listSSN;
    }

    public void setListName(List<UserProfile> listName) {
    this.listName = listName;
    }

    public void setListSSN(List<UserProfile> listSSN) {
    this.listSSN = listSSN;
    }

}

Classe: DBListArray

import java.util.ArrayList;

public class DBListArray extends DBList {

    public DBListArray() {
    super.setListName(new ArrayList<UserProfile>());
    super.setListSSN(new ArrayList<UserProfile>());
    }

    public DBListArray(ArrayList<UserProfile> listName, ArrayList<UserProfile> listSSN) {
    super.setListName(listName);
    super.setListSSN(listSSN);
    }

    public DBListArray(DBListArray dbListArray) {
    super.setListName(dbListArray.getListName());
    super.setListSSN(dbListArray.getListSSN());
    }

}

Classe: DBListLinked

import java.util.LinkedList;

public class DBListLinked extends DBList {

    public DBListLinked() {
    super.setListName(new LinkedList<UserProfile>());
    super.setListSSN(new LinkedList<UserProfile>());
    }

    public DBListLinked(LinkedList<UserProfile> listName, LinkedList<UserProfile> listSSN) {
    super.setListName(listName);
    super.setListSSN(listSSN);
    }

    public DBListLinked(DBListLinked dbListLinked) {
    super.setListName(dbListLinked.getListName());
    super.setListSSN(dbListLinked.getListSSN());
    }

}

1) Isso faz algum sentido? O que estou fazendo errado? você tem alguma recomendação?

2) Faria mais sentido para mim ter os construtores emDBList e chamando-os (comsuper()) nas subclasses, mas não posso fazer isso porque não consigo inicializar uma variável comnew List<E>().

3) Pensei em fazer cópias profundas sempre que possível e, por isso, sempre substituo oclone() método das minhas classes e codifique-o de acordo. Mas essas classes nunca tinham listas, conjuntos ou mapas, apenas tinham strings, ints, floats. Como faço cópias profundas nessa situação?

questionAnswers(1)

yourAnswerToTheQuestion